自定义Xib的View在带XIB的控制器上布局错乱的解决方法

不会讲话,直接进入主题:

问题重现:

1、我创建了个带xib的控制,蓝色是一个普通view,要在这个普通的view上加载自定义view

自定义Xib的View在带XIB的控制器上布局错乱的解决方法_第1张图片


2、这是我的自定义view


3、这是我的自定义view的.m实例化方法

自定义Xib的View在带XIB的控制器上布局错乱的解决方法_第2张图片

4、在控制器上创建这个自定义View


自定义Xib的View在带XIB的控制器上布局错乱的解决方法_第3张图片

5、模拟器显示高度好像可以,但是宽度完全不对


自定义Xib的View在带XIB的控制器上布局错乱的解决方法_第4张图片

6、查看三维度,完全崩溃了,宽高全不对


自定义Xib的View在带XIB的控制器上布局错乱的解决方法_第5张图片

错误重现完毕,以上



经过各种反复的思考及验证,得出了答案,但这个答案必须对自动布局有一定了解才能明白:

问题答案:

自定义Xib的View在带XIB的控制器上布局错乱的解决方法_第6张图片

在控制器中,这个蓝色view是自动布局写的,并非写死frame的,对于自定义View来说,蓝色View自己都不知道自己的具体尺寸,怎么保证我的宽高呢,自动布局与frame在某种角度上说是对立的,用自动布局,就不能用frame

自定义Xib的View在带XIB的控制器上布局错乱的解决方法_第7张图片

,解决方法就是自定义的view,放弃frame的布局,也用自动布局autolayout、masonry、sdautolayou等原生及三方法工具,


自定义Xib的View在带XIB的控制器上布局错乱的解决方法_第8张图片


最后的运行结果:

自定义Xib的View在带XIB的控制器上布局错乱的解决方法_第9张图片




总结:

一、如果自定义xib的View,是直接加载self.view这个父视图上的话,用frame去调整宽高是没有问题的

二、如果自定义xib的view,是加载到self.view里面的某个使用自动布局的View上面的,这个自定义xib的view,也必须要用自动布局或三方布局工具去调宽高坐标(有点绕口)

以上

你可能感兴趣的:(自定义Xib的View在带XIB的控制器上布局错乱的解决方法)