iOS 屏幕适配的理解
2016-09-23 16:30
274 查看
由于本人很少用xib storyboard 所以这里的说是代码层面的适配.
手写代码,很多人在用代码适配都是使用Masonry或者UIView的Category,搭配上一个屏幕宽度比例或者高度比例的系数(
[[UIScreen mainScreen]bounds].size.宽或者高 / 屏幕的宽度或者高度)。其实用多了你会发现其实适配就是那么回事吧。
为什么这么说。在我理解,其实适配就是设计对这个控件摆放的一个要求。什么意思?
比如设计对屏幕上的这个button的要求就是在不同屏幕下都是距离上、左10px,宽高是100 * 100。那么这个button就不需要去适配。
UIButton *button = [UIButton new];
[self.view addSubview:button];
//Masonry写法
[button mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.equalTo(self.view).offset(10);
make.size.mas_equalTo(CGSizeMake(100, 100));
}];
//frame写法
button.frame
=CGRectMake(10,10,100,100);
如果要求这个button在不同屏幕下会有相应的缩放,你可以去乘以一个系数比例。Tips:为了适配4和5(同宽度,不同高度),一般会乘宽度比较好,当然也可以乘以高度比,这里主要看需求。
//Masonry 写法
[button mas_makeConstraints:^(MASConstraintMaker *make) {
//如果仅仅是尺寸上的缩放,那么间距上也就不需要去乘系数。
make.left.top.equalTo(self.view).offset(10
* SCALE);
make.size.mas_equalTo(CGSizeMake(100 *
SCALE, 100 * SCALE));
}];
//frame写法
//如果仅仅是尺寸上的缩放,那么间距上也就不需要去乘系数。
button.frame = CGRectMake(10 *
SCALE, 10 * SCALE, 100 * SCALE, 100 * SCALE);
如果是特殊要求,那么就得根据屏幕的尺寸判断去写多套布局,这里只展示frame版本,Masonry在约束上也是根据需求去判断。
if (SCREEN_WIDTH
== 320) {
button.frame = CGRectMake(10,10,100,100);
}elseif (SCREEN_WIDTH
==375) {
button.frame = CGRectMake(12,12,100,100);
}else {
button.frame = CGRectMake(15,15,120,120);
}
Masonry和frame的比较:
1.在代码量方面,Masonry会偏多一些,frame在不需要计算行高的地方也就一行。
2.在影响方面,Masonry更新控件的约束会影响其他控件相对于这个控件的位置。
frame只会影响自己,并不会影响其他的控件。
举个例子:
leftButton.frame = CGRectMake(0, 0,
100, 100);
rightButton.frame = CGRectMake(leftButton.right , 0 , 100, 100);
改变leftButton的宽度 , leftButton.frame = CGRectMake(0, 0, 200, 100);
这时rightButton的x点还是100,并不会变成200.
如果使用Masonry
[leftButton mas_updateConstraints:^(MASConstraintMaker
*make) {
make.size.mas_equalTo(CGSizeMake(200,100));
}];
这时rightButton x点的位置会变为200。
3.在执行顺序方面,Masonry代码执行时间不会立刻执行(block),frame会立刻执行。
4.控件设置方面, Masonry在某些特定情况优于frame。详情看Masonry官方demo。
总着来说,具体的适配,完全依赖于设计的要求。
使用适配的方式,看个人喜好和实际需求吧。怎么方便怎么来。
以上为个人看法, 写的不好的地方还请指正谢谢,如有问题,欢迎留言。
手写代码,很多人在用代码适配都是使用Masonry或者UIView的Category,搭配上一个屏幕宽度比例或者高度比例的系数(
[[UIScreen mainScreen]bounds].size.宽或者高 / 屏幕的宽度或者高度)。其实用多了你会发现其实适配就是那么回事吧。
为什么这么说。在我理解,其实适配就是设计对这个控件摆放的一个要求。什么意思?
比如设计对屏幕上的这个button的要求就是在不同屏幕下都是距离上、左10px,宽高是100 * 100。那么这个button就不需要去适配。
UIButton *button = [UIButton new];
[self.view addSubview:button];
//Masonry写法
[button mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.equalTo(self.view).offset(10);
make.size.mas_equalTo(CGSizeMake(100, 100));
}];
//frame写法
button.frame
=CGRectMake(10,10,100,100);
如果要求这个button在不同屏幕下会有相应的缩放,你可以去乘以一个系数比例。Tips:为了适配4和5(同宽度,不同高度),一般会乘宽度比较好,当然也可以乘以高度比,这里主要看需求。
//Masonry 写法
[button mas_makeConstraints:^(MASConstraintMaker *make) {
//如果仅仅是尺寸上的缩放,那么间距上也就不需要去乘系数。
make.left.top.equalTo(self.view).offset(10
* SCALE);
make.size.mas_equalTo(CGSizeMake(100 *
SCALE, 100 * SCALE));
}];
//frame写法
//如果仅仅是尺寸上的缩放,那么间距上也就不需要去乘系数。
button.frame = CGRectMake(10 *
SCALE, 10 * SCALE, 100 * SCALE, 100 * SCALE);
如果是特殊要求,那么就得根据屏幕的尺寸判断去写多套布局,这里只展示frame版本,Masonry在约束上也是根据需求去判断。
if (SCREEN_WIDTH
== 320) {
button.frame = CGRectMake(10,10,100,100);
}elseif (SCREEN_WIDTH
==375) {
button.frame = CGRectMake(12,12,100,100);
}else {
button.frame = CGRectMake(15,15,120,120);
}
Masonry和frame的比较:
1.在代码量方面,Masonry会偏多一些,frame在不需要计算行高的地方也就一行。
2.在影响方面,Masonry更新控件的约束会影响其他控件相对于这个控件的位置。
frame只会影响自己,并不会影响其他的控件。
举个例子:
leftButton.frame = CGRectMake(0, 0,
100, 100);
rightButton.frame = CGRectMake(leftButton.right , 0 , 100, 100);
改变leftButton的宽度 , leftButton.frame = CGRectMake(0, 0, 200, 100);
这时rightButton的x点还是100,并不会变成200.
如果使用Masonry
[leftButton mas_updateConstraints:^(MASConstraintMaker
*make) {
make.size.mas_equalTo(CGSizeMake(200,100));
}];
这时rightButton x点的位置会变为200。
3.在执行顺序方面,Masonry代码执行时间不会立刻执行(block),frame会立刻执行。
4.控件设置方面, Masonry在某些特定情况优于frame。详情看Masonry官方demo。
总着来说,具体的适配,完全依赖于设计的要求。
使用适配的方式,看个人喜好和实际需求吧。怎么方便怎么来。
以上为个人看法, 写的不好的地方还请指正谢谢,如有问题,欢迎留言。
相关文章推荐
- iOS视网膜(Retina)屏幕的适配方法
- IOS屏幕3.5寸和4寸屏幕适配 之 适配ios6转屏
- IOS Orientation, 想怎么转就怎么转~~~ 此博文主要针对IOS应用, 是屏幕旋转相关问题的一个总结. 主要内容有: IOS5,6,7不同版的适配. 强制旋转和自动旋转.
- ios-屏幕适配(代码)
- IOS开发之绝对布局和相对布局(屏幕适配)
- iOS视网膜(Retina)屏幕的适配方法
- iOS关于iPhone6和iPhone6 Plus的屏幕适配问题
- IOS开发屏幕适配问题(一)
- iOS开发实用技巧——屏幕适配研究
- iOS开发实用技巧——屏幕适配研究
- 堵你妹研究之二 一套资源图片完美适配ios五种屏幕的尺寸
- iOS开发实用技巧——屏幕适配研究
- iOS开发实用技巧——屏幕适配研究
- IOS APP开发UI上得尺寸注意问题(屏幕、适配、分辨率)
- IOS开发——3.5/4英寸屏幕适配
- ios中屏幕适配
- ios开发适配3.5寸和4寸屏幕
- iOS 屏幕适配
- iOS技巧——xcode的xib文件的6、7、3.5、4寸屏幕的四种适配
- iOS关于iPhone6和iPhone6 Plus的屏幕适配问题