IOS Autolayout

 Autolayout是一種自動佈局技術,專門用來佈局UI界面的

 ●  AutolayoutiOS 6開始引入,因爲Xcode 4的不給力,當時並無獲得很大推 廣佈局

●  iOS 7(Xcode 5)開始,Autolayout的開發效率獲得很大的提高spa

●  蘋果官方也推薦開發者儘可能使用Autolayout來佈局UI界面code

●  Autolayout能很輕鬆地解決屏幕適配的問題 對象

 

Autoresizing
Autolayout以前,有Autoresizing能夠做屏幕適配,但侷限性較大,有些任務
根本沒法完成
相比之下,Autolayout的功能比Autoresizing強大不少

 

 

Autolayout2個核心概念ip

參照
約束
ci

 

 

 

**警告 開發

控件的frame不匹配所添加的約束, 好比 好比約束控件的寬度爲100, 而控件如今的寬度是110 it

**錯誤 io

缺少必要的約束, 好比 class

    只約束了寬度和高度, 沒有約束具體的位置

兩個約束衝突, 好比
    1個約束控件的寬度爲100, 1個約束控件的寬度爲110

 

 

 

代碼實現Autolayout

代碼實現Autolayout的步驟
利用NSLayoutConstraint類建立具體的約束對象
添加約束對象到相應的view
- (void)addConstraint:(NSLayoutConstraint *)constraint; - (void)addConstraints:(NSArray *)constraints;

 

代碼實現Autolayout的注意點
要先禁止autoresizing功能,設置view的下面屬性爲NO

view.translatesAutoresizingMaskIntoConstraints = NO; 添加約束以前,必定要保證相關控件都已經在各自的父控件上
不用再給view設置frame

 

 

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 :常量

自動佈局有個核心公式

obj1.property1 =(obj2.property2 * multiplier)+ constant value

 

 

 

在建立約束以後,須要將其添加到做用的view
在添加時要注意目標view須要遵循如下規則:
添加約束的規則1:
對於兩個同層級view之間的約束關係,添加到它們的 父view
添加約束的規則2:
對於兩個不一樣級view之間的約束關係,添加到他們最近的共同的 父view
 
添加約束的規則3
對於有層次關係的兩個view之間的約束關係,添加到層次較高的 父view
相關文章
相關標籤/搜索