Swift 在Xib中嵌套使用Xib文件
一、前言
由于公司的iMac之前一直使用的是机械硬盘,所以在使用Xib的时候会导致电脑卡的飞起,所以一直以来都是纯代码构建页面。在经过不断的吐槽之后公司终于换上了固态硬盘,在iMac整体速度大幅提升的情况下,又重新开始使用Xib画UI。
二、Xib的嵌套
在开发中如果页面比较复杂一般会拆分成多个子视图,而如果一个使用Xib的页面存在大量的控件,那么就可以考虑将它拆分成多个子Xib然后嵌套使用。下面介绍一下Xib的嵌套使用:
1.首先创建子控件的Xib文件

2.指定File‘s Owner的Custom Class为自定义View的类名

3.重写CustomView的 init?(coder aDecoder:NSCoder) 方法,在里面加载Xib

4.在父视图上拖出一个View并将这个View的类名设置成自定义View的类名

注意: 第二步和第四步都是设置Custom Class,不过一个是设置子视图的File’s Owner,一个是设置父视图中UIView。
然后编译运行后就能看到自定义的View已经显示到了界面上。

三、遇到的问题
在使用Xib嵌套Xib的时候出现了下面这种尴尬的情况。两个自定义的UIView和一个UIButton,但是在页面上只能看到Button的显示效果,自定义的UIView是一片空白。只有运行之后才能看到页面,那么怎样才能在不运行的情况下也让Xib上的控件也能显示出来呢?

四、IBDesignable
实际上为了解决这个问题,Xcode提供了一个叫做 IBDesignable的东西。
IBDesignable功能就是让XCode动态渲染出该类图形化界面。
在自定义的View添加 IBDesignable,

这时Xib上会出现一个 Designables 显示当前的编译状态。


五、IBDesignable Build Failed
如果在使用IBDesignable的过程中出现Buil Failed,下面提供一种解决方法。

1. 在自定义的View中重写 init(frame:CGRect) 方法 并且加载 Xib。

2.打开Xcode -> Preferences -> Locations 点击小箭头进入 Derived Data文件夹,删除里面的内容。

3. Clean 整个工程
4. 重启Xcode。