在一些复杂的iOS UI设计中,自动布局并不是总能满足开发的需求,这时我们不得不借助代码来控制UI的显示。但是使用代码控制UI显示的时候,我们不得不在storyboard中将Use Auto Layout以及Use Size Classes取消勾选,否则我们的UI布局代码将无效。

wKiom1W9l_6wwGcTAAF1eH98i7c835.jpg

      在取消勾选这两项后,我们会发现一个问题,在一个视图上的该操作将使storyboard上所有的UI界面都无法使用自动布局。而有些情况下我们仅仅只是想让部分UI控件不使用自动布局,比如我们想让TableView中的TableViewCell使用代码进行控制,而其它控件还维持自动布局。这时候我们就不得不将TableViewCell独立出storyboard,使用xib能够满足我们的需求,这就要求我们能够在storyboard中价值xib文件。下面我们以添加自定义UITableViewCell来演示如果在storyboard中价值xib文件。

  1. 首先在工程中添加Cocoa Touch Class,这个自定义类继承自UITableViewCell,并附带xib文件。

  2. 打开这个xib文件,取消Use Auto Layout和Use Size Classes,然后在自定义类中添加该视图的显示控制代码。

  3. 在完成UITableViewCell的设计后我们将开始在storyboard中进行xib的加载。关键的函数是tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell:

wKiom1W9myvTWZvqAAb9mvdnQMA718.jpg      在代码的if语句中我们有一个bool型的变量标识字自定义的cell是否已经注册,如果没有注册过,我们将使用loadNibNamed函数进行cell的加载,并使用registerNib进行注册。如果已经完成注册,那么我们便可以reuse这个cell。

      通过这样的方法我们既满足使用代码控制局部控件显示方式,又不影响storyboard上其他视图的自动布局设置,在一些情况下能够更灵活的满足我们的一些需求。