iOS中文API之NSLayoutconstraint,nslayoutconstraint

來源:互聯網
上載者:User

iOS中文API之NSLayoutconstraint,nslayoutconstraint

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

 

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

  item1.attribute1 = multiplier × item2.attribute2 + constant

 

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

  button2.leading = 1.0 × button1.trailing + 8.0

 

  另外。約束並不局限於平等關係。它們還可以使用大於或等於 (> =) 或小於或等於 (< =) 來描述這兩個屬性之間的關係。約束還具有 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

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

 

下篇介紹使用方法,本文結束

 

  

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.