iOS中文API之NSLayoutconstraint

AutoLayout為開發者提供了一種不同于傳統對于UI元素位置指定的布局方法。以前,不論是在IB里拖放,還是在代碼中寫,每個UIView都會有自己的frame屬性,來定義其在當前視圖中的位置和尺寸。使用AutoLayout的話,就變為了使用約束條件來定義view的位置和尺寸。這樣的最大好處是一舉解決了不同分辨率和屏幕尺寸下view的適配問題,另外也簡化了旋轉時view的位置的定義,原來在底部之上10像素居中的view,不論在旋轉屏幕或是更換設備(iPad或者iPhone5或者以后可能出現的mini iPad)的時候,始終還在底部之上10像素居中的位置,不會發生變化。

約束定義了兩個用戶借口之間的關系,通過創建約束來滿足我們的要求(可見控件在布局系統中的位置和尺寸)。每個約束是一個線性方程,具有以下格式:

<span>item1<span>.<span>attribute1 <span>= <span>multiplier <span>&times; <span>item2<span>.<span>attribute2 <span>+ <span>constant</span></span></span></span></span></span></span></span></span></span></span>

在這個方程式中,attribute1 和 attribute2 是自動布局可以調整時解決這些制約因素的變量。當你創建約束定義其他值。例如,如果您定義兩個按鈕的相對位置,第二個按鈕的起始位置距離第一個按鈕結束位置后8像素點。這種關系為線性方程如下所示:

<span> button2<span>.<span>leading <span>= <span>1.0 <span>&times; <span>button1<span>.<span>trailing <span>+ <span>8.0</span></span></span></span></span></span></span></span></span></span></span>

另外。約束并不局限于平等關系。它們還可以使用大于或等于 (> =) 或小于或等于 (< =) 來描述這兩個屬性之間的關系。約束還具有 1 到 1000 之間的優先級。具有優先級 1000 的約束是必需的。小于 1,000 的所有優先級是可選的。默認情況下,所有約束都是需要 (優先級 = 1,000)。在解決所要的約束后,AutoLayout將從最高到最低的優先級順序來處理所有可選約束,如果它不能解決一個可選的約束,它將嘗試來作為盡可能接近所需的結果,然后移動到下一個約束。這種不平等、 平等和優先級的結合給你強大的靈活性。通過結合多個約束,您可以定義動態地適應用戶界面元素在屏幕中的大小和位置。

創建約束

+ (NSArray<__kindof NSLayoutConstraint *> *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(nullable NSDictionary<NSString *,id> *)metrics views:(NSDictionary<NSString *, id> *)views

通過VFL描述創建約束

參數:

format

約束的格式規范.

opts

選項描述多有對象的屬性和布局的方向

metrics

在可視格式字符串中出現的約束dictionary,dictionary的key必須是NSString值,dictionary的value必須是NSNumber類型。

views

視圖dictionary,dictionary的key必須是NSString值,dictionary的value必須是UIView對象。

返回值:

約束的數組

+(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c

通過定義給定視圖的指定屬性之間的關系創建約束

參數:

view1

約束左側的視圖

attr1

約束左側視圖的屬性

relation

約束左側和右側視圖的關系

view2

約束右側的視圖

attr2

約束右側視圖的屬性

multiplier

乘數

c

常量值

激活或停用約束

property (getter=isActive) BOOL active

獲取一個約束的狀態。默認為NO。

+ (void)activateConstraints:(NSArray<NSLayoutConstraint *> *)constraints

激活指定約束數組中的所有約束。

+ (void)deactivateConstraints:(NSArray<NSLayoutConstraint *> *)constraints

停用指定約束數組中的所有約束。

訪問約束數據

@property UILayoutPriority priority

優先級屬性。如果一個約束的優先級小于UILayoutPriorityRequired,那么這個約束是可選的。先滿足高優先級的約束再可滿足低優先級的約束。優先級必須是大于0且小于或等于NSLayoutPriorityRequired。

@property(readonly, assign) id firstItem

參與約束的第一個對象。

@property (readonly) NSLayoutAttribute firstAttribute

第一個對象的屬性。

@property (readonly) NSLayoutRelation relation

約束中,2個屬性的關系。

@property (nullable, readonly, assign) id secondItem

參數約束的第二個對象。

@property (readonly) NSLayoutAttribute secondAttribute;

第二個對象的屬性

枚舉,常量

NSLayoutAttribute

對象的可視化表示形式,用于獲取該約束的值的一部分。

聲明:文章"iOS中文API之NSLayoutconstraint"為相王科技 Array原創文章,轉載請注明出處,謝謝合作!
国产精品免费视频每日更新_久久AV七七AV_被多人玩弄的烂货_国产片手机永久免费观看