2016年2月15日 星期一

[iOS] AutoLayout筆記 - Priority的功能



設定Constraint的時候,可能會發現有一欄叫做Priority,可是似乎都沒有用到。

某些狀況下你會需要它的,舉例來說。

我現在有一個View,他的高度希望是由螢幕解析度來決定,但是又希望有上下限。

像是,View的高為螢幕高的1/6,可是最大不能超過100。

這算是比較特別的例子,他會隨著螢幕解析度的不同而改變,而最大不會超過100

如果有這類的需求,就可以使用Priority來達成。

像是在4s的時候,1/6的大小應該不會超過100,

而6s+的時候,1/6的大小會超過100,而你希望他不要超過。

首先先做簡單的設定,左上右均為0 ,高為100。


















接著在設定此View高為螢幕的1/6,並將Priority設為750。


最後將高為100的Relation 改為 Less Than or Equal

此時你執行此APP,在最小的4s手機下,這個View的高是160(2x),也就是4s高的1/6,

在6s+執行時,原本1/6應該是320(3x),但是我們規定他最高不能超過100,在3x的時候就是不能超過300,因此這個View的高度會是300

Priority他的值越高越不會被改動,設為1000就是最高選項,任何人都得聽它的話,值越小的Constraint要聽值越高的。

以這個例子來說

螢幕高1/6      Priority 750
高度小於100  Priority 1000

在4s的狀況下 第一條得到的結果是160(2x),而第二條也是符合的,小於等於200(2x)

在6s+的狀況下 第一條得到的結果是320(3x),可是第二條的Priority高於第一條,

第一條說我想要這個View是320,可是他Priority輸給高度小於300(3x)

因此只好聽老大的話,乖乖的小於等於300(3x)。

你可以設定多個優先順序,來達到你想要的效果。


備註:

這邊的值都是依照該裝置的2x 3x來說明的,

簡單的說我輸入100,在2x的裝置下就是100x2 = 200

3x則是300。