autoResizing:佈局
一共六條約束。spa
四周的四條約束:用於保證和其餘視圖的距離保持不變(若是勾選保持不變)code
中間的兩條約束:用因而否容許該視圖能夠縮放(若是勾選,則能夠縮放)繼承
缺陷:若是在一個父視圖上添加多個子視圖的時候,須要讓兩個子視圖存在某種約束的時候,不怎麼可能實現ip
經過代碼實現autoResizing字符串
view.autoresizingMask = UIViewAutoresizingNone;//默認不進行自動佈局 /* 默認不進行自動佈局 UIViewAutoresizingNone 設置表示可伸縮,至關於NIB文件設置不勾選 UIViewAutoresizingFlexibleLeftMargin UIViewAutoresizingFlexibleRightMargin UIViewAutoresizingFlexibleTopMargin UIViewAutoresizingFlexibleBottomMargin 設置表示可伸縮,至關於NIB文件設置勾選 設置橫向能夠縮放 UIViewAutoresizingFlexibleWidth 設置縱向能夠縮放 UIViewAutoresizingFlexibleHeight */
autoLayout:重點it
一、使用autoLayout後,frame失效io
黃色(警告):繪製的視圖和添加約束後應該顯示的位置不一致,不影響顯示結果(使用update frame更新 frame值)class
紅色(警告):缺乏約束,約束衝突date
update frame:修改frame,以約束顯示視圖
update Constraint:修改約束,以frame顯示視圖
二、代碼建立約束
使用代碼建立autoLayout約束的時候,首先應該把autoResizing關掉
view.translatesAutoresizingMaskIntoConstraints =NO;
建立方式
NSLayoutConstraint * right = [NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1 constant:-90];
三、添加多個約束
思路:水平的視圖當作一組,垂直的視圖當作一組
VFL的語法總結:
(1)控件使用」[ ]」括起來
(2)控件之間只用」-」
(3)使用」H/V」表示方向,H:水平 V:垂直
(4)使用」|」表示父視圖的邊界
(5)對視圖自身顯示的時候使用」( )」,若是條件有多個用」,」隔開 [button(>= 50,<= 100)]
建立VFL字符串
水平方向H:
豎直方向V:
NSString *str = @"H:|-20-[leftView]-20-[rightView(==leftView)]-20-|"
SizeClasses
使用SizeClasses必須使用Auto Layout
iOS8推出,iOS8以前的不能使用
一、將屏幕分爲九種狀況
寬:緊湊(compact)任意(any)寬鬆(regular)
高:緊湊(compact)任意(any)寬鬆(regular)
注意:若是在any狀況下添加約束,會被」繼承」
之後添加約束,最好別在含有any的狀況下設置