? ?因為項目中存在這么一個功能,當為某狀態的時候,頭部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;
點擊代碼如下:
最終實現效果如下:
最終效果