適配方案
-
手碼適配
手碼寫控件的時(shí)候用此方法適配
根據(jù)當(dāng)前屏幕寬高,其他控件坐標(biāo)及寬高等進(jìn)行適配
//獲取屏幕的寬高
#define ScreenWidth [UIScreen mainScreen].bounds.size.width
#define ScreenHeight [UIScreen mainScreen].bounds.size.height
示例:
labelOne根據(jù)當(dāng)前屏幕寬高適配
labelTwo根據(jù)labelOne坐標(biāo)及寬高進(jìn)行適配
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];
效果圖:
-
AutoResizing
AutoLayout之前的適配方法,現(xiàn)在不常用了
在view的autoresizesSubviews屬性為YES時(shí)(默認(rèn)為YES), AutoResizing才會(huì)生效
因?yàn)閺腦code6開始,storyboard&xib默認(rèn)是自動(dòng)布局,所以需要手動(dòng)調(diào)整,才能使用AutoResizing,按下圖所示,將AutoLayout和SizeClasses取消勾選
示例:
在view上添加textField,根據(jù)屏幕寬度自動(dòng)伸縮,左右距離屏幕均為20
1-根據(jù)當(dāng)前view的尺寸(寬375,高667),將textField添加在正確位置
2-方框內(nèi)的橫豎為textField的寬高是否縮放,方框外的上下左右為距離父視圖的距離
效果圖:
如果只設(shè)置了上邊距和右邊距,則運(yùn)行結(jié)果為:
- AutoLayout
直接約束
簡(jiǎn)單易用,最愛!只需要給每一個(gè)控件設(shè)置好唯一位置即可!
下圖暗色部分,為設(shè)置兩個(gè)控件坐標(biāo)時(shí)使用
下圖最下面兩行,為屏幕寬高居中
下圖為設(shè)置某一控件上下左右距離及自身寬高
注意:此兩種配合使用時(shí),很可能出現(xiàn)設(shè)置重復(fù),在下圖中查看,將重復(fù)的刪除即可(點(diǎn)中某一行,直接delete)
快捷鍵:
command+option+"=" 將控件移動(dòng)到適配后的位置
VFL語(yǔ)言約束
僅了解一點(diǎn),沒怎么用過
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];
效果圖:
-** SizeClasses**
iOS8之后新增的特性,將屏幕分成不同的抽象概念,具體還未使用過