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-限制處理
Snip20150821_36.png
02-相對
Snip20150821_37.png
03-對齊
Snip20150821_38.png
Autolayout的警告和錯誤
Snip20150821_40.png- 警告: 控件的frame不比對所添加的限制, 比如限制控件的寬度為, 而控件現在的寬度是 如下圖所示:
Snip20150821_39.png- 錯誤: 缺乏必要的限制, 比如隻限制了寬度和高度, 沒有限制具體的位置 如下圖所示:
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;
代碼實作Autolayout的注意點
- (void)addConstraints:(NSArray *)constraints;
- 要先禁止autoresizing功能,設定view的下面屬性為NO `view.translatesAutoresizingMaskIntoConstraints = NO;` - 添加限制之前,一定要保證相關控件都已經在各自的父控件上不用再給view設定frame
添加限制的規則
在建立限制之後,需要将其添加到作用的view上
在添加時要注意目标view需要遵循以下規則:
1)對于兩個同層級view之間的限制關系,添加到它們的父view上
Snip20150821_41.png
2)對于兩個不同層級view之間的限制關系,添加到他們最近的共同父view上
Snip20150821_42.png
3)對于有層次關系的兩個view之間的限制關系,添加到層次較高的父view上
Snip20150821_43.png