美文网首页iOSUI
Swift 在Xib中嵌套使用Xib文件

Swift 在Xib中嵌套使用Xib文件

作者: Jason_h | 来源:发表于2018-10-21 18:58 被阅读0次

    一、前言

    由于公司的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

    相关文章

      网友评论

        本文标题:Swift 在Xib中嵌套使用Xib文件

        本文链接:https://www.haomeiwen.com/subject/clielttx.html