適配方案
-
手碼適配
手碼寫控件的時候用此方法適配
根據當前屏幕寬高,其他控件坐標及寬高等進行適配
//獲取屏幕的寬高
#define ScreenWidth [UIScreen mainScreen].bounds.size.width
#define ScreenHeight [UIScreen mainScreen].bounds.size.height
示例:
labelOne根據當前屏幕寬高適配
labelTwo根據labelOne坐標及寬高進行適配
UILabel *labelOne = [[UILabel alloc] initWithFrame:CGRectMake(ScreenWidth/2 - 20, 20, 40, 40)];
labelOne.backgroundColor = [UIColor yellowColor];
[self.view addSubview:labelOne];
UILabel *labelTwo = [[UILabel alloc] initWithFrame:CGRectMake(labelOne.frame.origin.x, labelOne.frame.origin.y + labelOne.frame.size.height + 10, labelOne.frame.size.width, labelOne.frame.size.height)];
labelTwo.backgroundColor = [UIColor greenColor];
[self.view addSubview:labelTwo];
效果圖:

78AA851F-9710-447C-9A52-C6446788DD40.png
-
AutoResizing
AutoLayout之前的適配方法,現在不常用了
在view的autoresizesSubviews屬性為YES時(默認為YES), AutoResizing才會生效
因為從Xcode6開始,storyboard&xib默認是自動布局,所以需要手動調整,才能使用AutoResizing,按下圖所示,將AutoLayout和SizeClasses取消勾選

BD1741E0-311A-421C-A9F7-A08313C8B750.png
示例:
在view上添加textField,根據屏幕寬度自動伸縮,左右距離屏幕均為20
1-根據當前view的尺寸(寬375,高667),將textField添加在正確位置

7F0B21A8-598B-494A-987F-88542920D826.png
2-方框內的橫豎為textField的寬高是否縮放,方框外的上下左右為距離父視圖的距離

DEDB62C4-0815-4FE3-86E3-EB03F644D657.png
效果圖:

A2C5379E-746E-4B2A-AA14-ED3F2F7D1CC6.png
如果只設置了上邊距和右邊距,則運行結果為:

C89268DA-2BC5-4027-9DBE-9FA1B5B1FA30.png
- AutoLayout
直接約束
簡單易用,最愛!只需要給每一個控件設置好唯一位置即可!
下圖暗色部分,為設置兩個控件坐標時使用
下圖最下面兩行,為屏幕寬高居中

384916D6-D79D-40DB-B8AB-145030CB809E.png
下圖為設置某一控件上下左右距離及自身寬高

8876192B-963C-4126-916B-9F37A40335D4.png
注意:此兩種配合使用時,很可能出現設置重復,在下圖中查看,將重復的刪除即可(點中某一行,直接delete)

D16E789F-88AF-40A9-9E73-47C5DD2D614E.png
快捷鍵:
command+option+"=" 將控件移動到適配后的位置
VFL語言約束
僅了解一點,沒怎么用過
UIButton *button=[[UIButton alloc]init];
[button setTitle:@"VFL約束" forState:UIControlStateNormal];
button.translatesAutoresizingMaskIntoConstraints=NO;
[button setBackgroundColor:[UIColor blackColor]];
[self.view addSubview:button];
NSArray *constraints1=[NSLayoutConstraint
constraintsWithVisualFormat:@"H:|-[button]-|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(button)];
NSArray *constraints2=[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|-20-[button(==30)]"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(button)];
[self.view addConstraints:constraints1];
[self.view addConstraints:constraints2];
效果圖:

6C6CA8CD-53F7-4117-8C1C-3D930A4F858F.png
-** SizeClasses**
iOS8之后新增的特性,將屏幕分成不同的抽象概念,具體還未使用過