因为项目中存在这么一个功能,当为某状态的时候,头部View显示三个模块。当为另种状态,头部View显示两个模块。三个模块效果图如下:
两个模块的状态如下:
看到这种需求,想也不想就知道需要用上约束来解决上述的问题:不错,本文就是通过用NSLayoutConstraint来解决该需求。
通过分析可知,当为某种状态,显示三个View。当为其他状态,显示两个View。先通过一个按钮实现切换状态。
搭建的界面如下:
我们设置了Btn1和Btn2和Btn3的width 相等。如果通过拉Btn3的widthConstraint到Controller进行操作。
现在就是开始计算的方程。
假设 KWidth [UIScreen mainScreen].bounds.size.width
当三模块时:AWdith+BWidth+CWidth = KWidth;
当两模块时:AWidth+BWidth = KWidth;
同时上述还存在AWidth=BWidth=CWidth的关系;
而我们拉出来的widthConstraint是存在这么一个关系的。
widthConstraint = AWidth*multiplier+constant;
因为multiplier=1 所以widthConstraint = AWidth+constant;代入上面的公式:
即AWidth+BWidth+AWidth+Constant = KWidth;
当三模块时Constant=0;所以AWidth=BWidth=CWidth=KWidth/3;
当两模块时,因为CWidth=0。所以Constant=-CWidth;
也就是AWidth=BWidth=KWidth/2;即constant=KWidth/2;
点击代码如下:
最终实现效果如下:
最终效果