例子
其實看完上面的敘述,你會思考,到底什么情況下,一個UIView需要只設置坐標不設置大小呢?
其實這種場景相當普遍。比如,我們常常會碰到,一個View中有兩個Label,兩個Label的高度均和內容有關,這時候,你的View的高度就必須由兩個Label的高度有關,而不能一開始就定死。例如。
一個已知寬度的UIView中,有兩個UILabel,我希望這個UIView的高度由兩個UIlabel的高度來確定。效果如下圖。
解決方法:
我們為這個紅色View設置了3個約束,分別是。
- Leading space to SuperView:8
- Trailing space to SuperView:8
- Top Space to SuperView:8
也就是分別設置了View的左邊距,右邊距和上邊距,熟悉約束的人應該知道,這時候View的約束是不夠的。為什么?
因為,左邊距和上邊距確定了View的(x,y),然后左邊距和右邊距確定了這個View的寬度,我們缺少了Height。
但是這個Height,要由View內部的兩個label來確定,為了讓Xcode不再認為我們拉的約束有問題,再結合我們上面講的Intrinsic Content Size
,我們可以在Xib的這個位置設置Intrinsic Size
為Placeholder
,這樣,Xcode就認為這個View有默認的大小,所以就不會報錯了。
為了label能夠多行顯示,別忘記設置lineofnumber為0.
還有一點需要注意的是,兩個UILabel之間肯定是需要一個設置一個垂直約束的,否則整個View就沒有辦法確定自己的高度,