iOS 屏幕适配的理解
来源:互联网 发布:linux 修改服务器时区 编辑:程序博客网 时间:2024/06/14 19:30
由于本人很少用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);
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 屏幕适配的理解
- 屏幕适配的理解
- IOS屏幕的适配
- cocos2dx 3.2 屏幕适配的理解
- Android中屏幕适配的理解
- 关于屏幕适配的一些理解
- 关于屏幕适配的理解
- iOS 屏幕适配
- iOS屏幕适配
- ios 屏幕适配
- IOS屏幕适配
- ios 屏幕适配
- ios屏幕适配
- IOS屏幕适配
- iOS 屏幕适配
- iOS屏幕适配
- iOS 屏幕适配
- 屏幕适配ios
- (iOS开发)设置navigationbar的背景色以及title的字体颜色
- AndroidSutdio中的jni开发
- iOS "The sandbox is not in sync with the Podfile.lock"解决方案
- 单片机晶振和波特率的关系
- spring security的原理及教程
- iOS 屏幕适配的理解
- ExtJS有关环境的更新
- (iOS开发)保存图片方法
- file_get_contents()打开URL无法获得数据返回false原因
- nova 通过 qemu-guest-agent 修改用户密码
- [Leetcode] Sort Colors
- maya基础知识备忘录
- Combox 设置默认值问题
- python3 urllib.request 按行处理