更加愉快的使用xib比例布局(放弃纯代码布局吧)

2,484 阅读2分钟

前言

虽然用了很久的xib,但是每次都在比例布局要处理很久,这次,就一次性解决它吧,反正有时间研究黑科技!

以前的处理方式

先说纯代码布局,无论是直接用frame布局还是Masorny还是SnapKit或多或少有涉及到根据屏幕宽还是高(一般是宽,何况现在还有不成比例的iPhoneX,更要用宽,抛弃iPhone4)来调整控件frame或者约束;

再说用storyBoard和xib,用autoLayout做布局的时候,有两种做比例的方法,一个是把约束拖出来属性控制,一个直接在可视化界面进行约束的比例设置,简单看一下



上图对top设置距离父试图137的距离



改成比例处理就把父试图的top改成bottom(bottom在可视化视图里是667的高度,实际是667-tabbar高度49),再设置距离137/618

距离父试图的约束好搞,宽高的比例约束也好搞,但是子视图之间的约束不好搞,我们来看一下



ui要求间距



设置距离步数11像素

然后改成比例设置

先获取平级约束关系视图的最大Y



最大y是182.5

然后约束距离11/182.5= 0.06

然后再1- 0.06 = 0.94



先调转约束关系



清零constant和设置比例0.94

上述两种方式,无论哪种都失去了可视化工具的有点,快速方便

还有维护迭代界面更改都不好处理。

现在要怎么做

现在的做法只需要添加这么一段代码执行就可以全面比例控件的约束constant,可视化界面的约束正常使用就可以了



在创建完控件后调用控制器里的fixLayoutConstant(view:self.view)

注意事项:

一些旧代码用的屏幕宽高来比例的这些约束,使用了上述代码会调整constant值,所以有很多注意的地方要自己去看适不适合用,已经用了比例约束的界面就不需要再改了,所以也不建议把这个方法放在全局创建完控件后去调用,建议单独选择去调用吧!

升级一下,更多比例化

也可以对view做label类型的判断,处理字号,

对圆角view.layer.cornerRadius做比例处理。

结尾

写这篇文章前,很少在网上看到有类似的处理方法,不知道为什么,难道你们都用纯代码吗?