天天看點

Autolayout 自動布局 Autolayout

Autolayout

字數715  閱讀273  評論7  喜歡1

在Autolayout之前,Autoresizing可以作螢幕适配,但局限性較大有些任務根本無法完成

相比之下,Autol'ayout的功能比Autoresizing強大很多

什麼是Autolayout


1.Autolayout是一種“自動布局”技術,專門用來布局UI界面的

2.Autolayout自iOS 6開始引入,由于Xcode 4的不給力,當時并沒有得到很大推廣

3.自iOS 7(Xcode 5)開始,Autolayout的開發效率得到很大的提升

4.蘋果官方也推薦開發者盡量使用Autolayout來布局UI界面

5.Autolayout能很輕松地解決螢幕适配的問題

Autolayout的2個核心概念

參照
            限制                

Autolayout常用面闆

01-限制處理

Autolayout 自動布局 Autolayout

Snip20150821_36.png

02-相對

Autolayout 自動布局 Autolayout

Snip20150821_37.png

03-對齊

Autolayout 自動布局 Autolayout

Snip20150821_38.png

Autolayout的警告和錯誤

- 警告:
       控件的frame不比對所添加的限制,
       比如限制控件的寬度為, 而控件現在的寬度是
       如下圖所示:                
Autolayout 自動布局 Autolayout
Snip20150821_40.png
- 錯誤:
       缺乏必要的限制, 
       比如隻限制了寬度和高度, 沒有限制具體的位置
       如下圖所示:
           
Autolayout 自動布局 Autolayout
Snip20150821_39.png
- 兩個限制沖突,:
       比如個限制控件的寬度為, 個限制控件的寬度為
       如下圖所示:                
Autolayout 自動布局 Autolayout
Snip20150821_39.png

通過代碼添加Autolayout

但首先需要先了解一個類(NSLayoutConstraint)

一個NSLayoutConstraint對象就代表一個限制

建立限制對象的常用方法

+ (id)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;
view1 :要限制的控件
attr1 :限制的類型(做怎樣的限制)
relation :與參照控件之間的關系
view2 :參照的控件
attr2 :限制的類型(做怎樣的限制)
multiplier :乘數
c :常量
           
  • 自動布局的核心計算公式
代碼實作Autolayout的步驟
- 利用NSLayoutConstraint類建立具體的限制對象 
- 添加限制對象到相應的view上
           

- (void)addConstraint:(NSLayoutConstraint *)constraint;

- (void)addConstraints:(NSArray *)constraints;

代碼實作Autolayout的注意點 
- 要先禁止autoresizing功能,設定view的下面屬性為NO
`view.translatesAutoresizingMaskIntoConstraints = NO;`
 - 添加限制之前,一定要保證相關控件都已經在各自的父控件上不用再給view設定frame
           

添加限制的規則

在建立限制之後,需要将其添加到作用的view上

在添加時要注意目标view需要遵循以下規則:

1)對于兩個同層級view之間的限制關系,添加到它們的父view上

Autolayout 自動布局 Autolayout

Snip20150821_41.png

2)對于兩個不同層級view之間的限制關系,添加到他們最近的共同父view上

Autolayout 自動布局 Autolayout

Snip20150821_42.png

3)對于有層次關系的兩個view之間的限制關系,添加到層次較高的父view上

Autolayout 自動布局 Autolayout

Snip20150821_43.png