2015-10-21 109 views
1

在我的一個視圖控制器中,我有一個方形控件,我想根據用戶的設備調整大小。該應用將始終以縱向模式運行。我在控件上有一個寬高比約束來保持它的平方。展開方形視圖,使用自動佈局填充矩形超級視圖

我有控制嵌入容器UIView。容器具有將其附加到內容視圖的左邊和右邊的約束,並且約束將其與容器上方和下方的其他控件隔開。根據iPhone的型號,容器視圖可以具有比左/右側(iPhone 4)更長的頂/底側,或者其可以具有比頂側/底側(iPhone 6)更長的左側/右側。我希望方形控件能夠水平居中,固定在容器的頂部,我希望它可以擴展以填充容器視圖,但仍然保持它的方面。

據我所知,我不能固定邊緣或某些約束會斷開,但是當我只固定頂部時,控制縮小爲無。我在控制系統上玩過抗壓,但沒有效果。

如果沒有需要容器視圖的解決方案,那很好。這似乎是容易控制容器。

回答

2

像這樣的情況通常可以通過將優先級降低的平等約束與需要優先級的不平等配對來解決。

因此,例如,一個約束,即正方形的前沿等於其優先級爲900的超級前沿前沿,並且約束該正方形的底部邊沿小於或等於其超級視圖底部所需的優先級。

當超級視圖高於寬度時,前沿可以重合,這樣約束將得到滿足,並且底部將小於超視圖的底部,以便滿足約束。當超視圖的寬度比寬度小時,一旦底部與超視圖的底部重合,正方形將不能增長,因爲這是一個必需的限制。前緣的約束將被打破,這是可以的,因爲它不是必需的,但是自動佈局系統仍然會盡可能地接近,這就是正方形的大小。

順便說一下,抗壓縮和內容擁抱的優先級只與視圖具有固有尺寸並僅與該固有尺寸有關。容器UIView沒有固有尺寸,所以這些優先級是無關緊要的。