iOS- Autolayout自動布局,ios-autolayout

來源:互聯網
上載者:User

iOS- Autolayout自動布局,ios-autolayout
1.前言  •在iOS程式中,大部分視圖控制器都包含了大量的代碼用於設定UI布局,設定控制項的水平或垂直位置,以確保組件在不同版本的iOS中都能得到合理的布局•甚至有些程式員希望在不同的裝置使用相同的視圖控制器,這就給代碼添加了更多的複雜性!•自動布局AutoLayout的引入很好地解決了這一問題!  2.什麼是AutoLayout  •AutoLayout是一種基於約束的,描述性的布局系統–基於約束:和以往定義frame的位置和尺寸不同,AutoLayout的位置確定是以所謂相對位置的約束來定義的,比如x座標為superView的中心,y座標為螢幕底部上方10像素等–描述性:約束的定義和各個view的關係使用接近自然語言或者可視化語言的方法來進行描述–布局系統:用來負責介面的各個元素的位置•AutoLayout為開發人員提供了一種不同於傳統對於UI元素位置指定的布局方法。以前,不論是在IB裡拖放,還是在代碼中寫,每個UIView都會有自己的frame屬性,來定義其在當前視圖中的位置和尺寸。而使用AutoLayout,就變為了使用約束條件來定義view的位置和尺寸 3.AutoLayout的優勢  •解決不同解析度和螢幕尺寸下view的適配問題,同時也簡化了旋轉時view的位置的定義。原來在底部之上10像素置中的view,不論在旋轉螢幕或是更換裝置(iPad、iPad mini、iPhone 4或者是iPhone5/iPhone6/iPhone6plus)的時候,始終還在底部之上10像素置中的位置,不會發生變化•使用約束條件來描述布局,view的frame會依據這些約束來進行計算 4.AutoLayout和Autoresizing Mask的區別  •在iOS6之前,關於旋轉螢幕的適配和iPhone,iPad螢幕的自動適配,基本都是由Autoresizing Mask來完成的。但是隨著大家對iOS App的要求越來越高,以及今後可能出現的多種螢幕和解析度的裝置,Autoresizing Mask顯得有些落伍和遲鈍了。AutoLayout可以完成所有原來Autoresizing Mask能完成的工作,同時還能勝任一些原來無法完成的任務,其中包括:•AutoLayout可以指定任意兩個view的相對位置,而不需要像Autoresizing Mask那樣需要兩個view在直系的view hierarchy中•AutoLayout不必須指定相等關係的約束,它可以指定非相等約束(大於或者小於等);而Autoresizing Mask所能做的布局只能是相等條件的•AutoLayout可以指定約束的優先順序,計算frame時將優先按照滿足優先順序高的條件進行計算 5.AutoLayout的基本使用  •在建立約束之後,需要將其添加到作用的view上。在添加時要注意目標view需要遵循以下規則:•1)  對於兩個同層級view之間的約束關係,添加到他們的父view上•2)   對於兩個不同層級view之間的約束關係,添加到他們最近的共同父view上•3)  對於有層次關係的兩個view之間的約束關係,添加到層次較高的父view上 6.添加和重新整理約束(代碼)  

 

-(void)addConstraint:(NSLayoutConstraint *)constraint

 

 •重新整理約束的改變

 

-setNeedsUpdateConstraints

 

-layoutIfNeeded

 


[button setTranslatesAutoresizingMaskIntoConstraints:NO];

 

 

// 2.1 水平方向的約束NSLayoutConstraint *constraintX = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f];[self.view addConstraint:constraintX];// 2.2 垂直方向的約束NSLayoutConstraint *constraintY = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f];[self.view addConstraint:constraintY];

 

 

6.使用AutoLayout容易出現的錯誤 •Ambiguous Layout 布局不能確定,即給出的約束條件無法唯一確定一種布局,也就是約束條件不足,無法得到唯一的布局結果。這種情況一般添加一些必要的約束或者調整優先順序可以解決•Unsatisfiable Constraints 無法滿足約束,問題來源是有約束條件互相衝突,因此無法同時滿足,需要刪掉一些約束•現在使用IB可以比較容易地完成複雜約束,在實際開發中很少再會遇到遺漏或者多餘約束情況的出現,有問題的約束條件將直接在IB中得到錯誤或者警告。 作者: 清澈Saup
出處: http://www.cnblogs.com/qingche/
本文著作權歸作者和部落格園共有,歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文串連。

 

 

 

  

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.