補充:iPhone6s plus 尺寸:5.5inch 分辨率:1920x1080數組
iPhone6s 尺寸:4.7inch 分辨率:1334x750
佈局
Autolayout是一種「自動佈局」技術,專門用來佈局UI界面,能很好的解決屏幕適配的問題。Autolayout的兩個核心概念,參照和約束。編碼
在storyboard中處理約束的幾個經常使用面板:spa
ViewControllerScene右邊若是出現則說明約束沒有問題了,只須要update frames就行了,若是是則說明約束有問題,多是缺少必要的約束,也多是有兩個約束衝突了。code
除了能夠在storyboard中添加約束,也能夠在代碼中給控件添加約束,可是。。。感受好麻煩啊
orm
主要就是經過NSLayoutConstraint類建立具體的約束對象,並將約束對象添加到相應的view上。對象
添加約束對象方法:ip
- (void)addConstraint:(NSLayoutConstraint *)constraint //添加單個約束 - (void)addConstraints:(NSArray<__kindof NSLayoutConstraint *> *)constraint //添加多個約束
代碼實現Autolayout的注意這幾點,要先禁止autoresizing功能,設置view的下面屬性爲NO,view.translatesAutoresizingMaskIntoConstraints = NO;it
添加約束以前,必定要保證相關控件都已經在各自的父控件上,不用再給view設置frame。io
一個NSLayoutConstraint對象就表明一個約束,建立約束的方法:
NSLayoutConstraint *constraint = [NSLayoutConstraint 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 :常量
添加約束的規則
一、對於兩個同層級view之間的約束關係,添加到它們的父view上。
二、對於兩個不一樣層級view之間的約束關係,添加到他們最近的共同父view上。
三、對於有層次關係的兩個view之間的約束關係,添加到層次較高的父view上。
---------------------------------------------
另外蘋果官方爲了簡化Autolayout的編碼還推出了另外一種語言,vfl(visual format language可視化格式語言)
H:[cancelButton(50)]-10-[acceptButton(50)] 表示 canelButton寬50,acceptButton寬50,它們之間間距10
V:[redView][yellowView(==redView)] 表示 豎直方向上,先有一個redView,其下方緊接一個高度等於redView高度的yellowView
使用VFL來建立約束數組
+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;
format :VFL語句
opts :約束類型
metrics :VFL語句中用到的具體數值
views :VFL語句中用到的控件
建立一個字典(內部包含VFL語句中用到的控件)的快捷宏定義 NSDictionaryOfVariableBindings(...)
// 間距 NSNumber *margin = @20; // 這條vfl就是水平方向上,blueView左邊距父控件最左邊距20,redView距父控件最右邊距20,blueView和redView中間距離20 NSString *vfl = @"H:|-margin-[blueView]-margin-[redView(==blueView)]-margin-|"; NSDictionary *views = NSDictionaryOfVariableBindings(blueView, redView); NSDictionary *mertrics = NSDictionaryOfVariableBindings(margin); NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:vfl options:NSLayoutFormatAlignAllTop | NSLayoutFormatAlignAllBottom metrics:mertrics views:views]; [self.view addConstraints:constraints];