iOSUI

Swift 在Xib中嵌套使用Xib文件

2018-10-21  本文已影响0人  Jason_h

一、前言

由于公司的iMac之前一直使用的是机械硬盘,所以在使用Xib的时候会导致电脑卡的飞起,所以一直以来都是纯代码构建页面。在经过不断的吐槽之后公司终于换上了固态硬盘,在iMac整体速度大幅提升的情况下,又重新开始使用Xib画UI。

二、Xib的嵌套

在开发中如果页面比较复杂一般会拆分成多个子视图,而如果一个使用Xib的页面存在大量的控件,那么就可以考虑将它拆分成多个子Xib然后嵌套使用。下面介绍一下Xib的嵌套使用:

1.首先创建子控件的Xib文件

自定义Xib

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

指定File's Owner的Custom Class

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

重写 init?(coder aDecoder: NSCoder) 

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

在父视图上设置自定义View

注意: 第二步和第四步都是设置Custom Class,不过一个是设置子视图的File’s Owner,一个是设置父视图中UIView。

然后编译运行后就能看到自定义的View已经显示到了界面上。

运行的效果

三、遇到的问题

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

Xib嵌套使

四、IBDesignable

实际上为了解决这个问题,Xcode提供了一个叫做 IBDesignable的东西。

IBDesignable功能就是让XCode动态渲染出该类图形化界面。

在自定义的View添加 IBDesignable,

添加IBDesignable

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

IBDesignable 最后的效果

五、IBDesignable Build Failed

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

Build Failed

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

init(frame:CGRect)

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

Derived Data

3. Clean 整个工程 

4. 重启Xcode。

参考文章

Nested Xib Views - 使用XIB实现嵌套自定义视图 - GeekerProbe

ios - Xcode 8 - IB Designables - Failed to render and update auto layout status, The agent crashed - Stack Overflow

上一篇 下一篇

猜你喜欢

热点阅读