【转】iOS屏幕适配
一、iOS屏幕适配发展历程
| 设备 | 适配技术 |
|---|---|
| 4及以前(iPad未出) | 直接用代码计算 |
| 有了iPad | autoResizing |
| 有不同屏幕的iPhone后 | autoLayout |
| 有更多不同屏幕的iPhone后 | sizeClass |
二、各个技术的特性
1、 直接用代码计算
由于屏幕的大小都一样,只有横竖屏的情况,可以直接计算
2、 autoResizing
适合于控件与其父控件的关系
各属性的解释
| 属性 | 解释 |
|---|---|
| UIViewAutoresizingNone | 不会随父视图的改变而改变 |
| UIViewAutoresizingFlexibleLeftMargin | 自动调整view与父视图左边距,以保证右边距不变 |
| UIViewAutoresizingFlexibleWidth | 自动调整view的宽度,保证左边距和右边距不变 |
| UIViewAutoresizingFlexibleRightMargin | 自动调整view与父视图右边距,以保证左边距不变 |
| UIViewAutoresizingFlexibleTopMargin | 自动调整view与父视图上边距,以保证下边距不变 |
| UIViewAutoresizingFlexibleHeight | 自动调整view的高度,以保证上边距和下边距不变 |
| UIViewAutoresizingFlexibleBottomMargin | 自动调整view与父视图的下边距,以保证上边距不变 |
- view的autoresizesSubviews属性为yes时(默认为yes),autoresizing才会生效。
- 从XCODE6开始,Storyboard&Xib默认是自动布局,因此我们需要手动调整,才能使用autoresizing。
- autoresizing可以组合使用,如:
UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin
3、autoLayout
帮我们确定在不同设备、不同(父view)环境下,同一个可视单元所应具有合适的位置和尺寸(任何两个视图的关系都可以确定)
1. autoLayout的用法:
- 直接建立约束条件
[self.view addConstraint: [NSLayoutConstraint
constraintWithItem:blueView
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:redView
attribute:NSLayoutAttributeLeft
multiplier:
constant:]];这样虽然代码量比较大,但是是绝对可行的办法,也是使用autoLayout最根本的办法之一。
- 使用VFL语言
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *button=[[UIButton alloc]init];
[button setTitle:@"点击一下" forState:UIControlStateNormal];
button.translatesAutoresizingMaskIntoConstraints=NO;
[button setBackgroundColor:[UIColor blackColor]];
[self.view addSubview:button];
NSArray *constraints1=[NSLayoutConstraint
constraintsWithVisualFormat:@"H:|-[button]-|"
options:
metrics:nil
views:NSDictionaryOfVariableBindings(button)];
NSArray *constraints2=[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|-20-[button(==30)]"
options:
metrics:nil
views:NSDictionaryOfVariableBindings(button)];
[self.view addConstraints:constraints1];
[self.view addConstraints:constraints2];
} - 使用使用第三方库,如:Masonry、UIView+AutoLayout……
2. autoLayout的好处:
- 你基本上可以不用考虑3.5寸和4寸以及即将上市的x.x寸屏幕不同分辨率的问题,你终于可以不用在viewDidLoad方法里判断不同分辨率下,不同控件应该放在哪里,或者针对不同分辨率写不同的storyboard和xib;
- 你可以抛弃那些根据不同文字来计算tableViewCell、UILabel高度的代码了,因为autolayout会帮你自动计算好;
- 如果你的布局在横屏竖屏下变化不是特别大,你不用再为横着竖着写两套代码或者写两个storyboard/xib了;
4、sizeClass
在iOS8中,新增了Size Classes特性,它是对当前所有iOS设备尺寸的一个抽象。那我们就只把屏幕的宽和高分别分成三种情况:Compact:紧凑、Regular:宽松、Any:任意。
这样宽和高三三一整合,一共9中情况。如下图所示,针对每一种情况。我们可以在每种情况下设置不同的布局(包括控件的约束,甚至是控件是否显示)
对sizeClass的理解:
sizeClass的实质是将iOS屏幕分成了不同的抽象概念,这些不同的抽象组合,对应着不同的设备屏幕。所以,利用sizeClass可以针对同一套UI,来适配所有的屏幕。注意:这些所有的适配,都是利用autoLayout来实现的,sizeClass只是负责提供不同的屏幕尺寸。
【转】iOS屏幕适配的更多相关文章
- iOS屏幕适配
## iOS屏幕适配 ### iOS屏幕适配发展史 1> iPhone4以前(没有iPad) * 不需要屏幕适配 2> iPad.iPhone5等设备出现 * 需要做横竖屏适配 * aut ...
- Auto Layout 在iOS屏幕适配中的使用
前几天在做iOS屏幕的适配,也就是让同样的UI控件的布局在不同屏幕的iOS设备上面都正确显示,storyBoard就无可避免的用到了Auto Layout.在这个过程中,我发现要熟练掌握Auto La ...
- iOS屏幕适配-iOS笔记
学习目标 1.[了解]屏幕适配的发展史 2.[了解]autoResizing基本用法 3.[掌握]autoLayout 的基本用法 4.[掌握]autoLayout代码实现 5.[理解]sizeCla ...
- iOS屏幕适配方案-Auto Layout
市场上的android手机五花八门.各种尺寸的屏幕让android程序员们比較头疼. 也有一些大神写了一些博客提出了自己的观点.iOS貌似也迎来了大屏6+,因此屏幕适配的问题也是有滴,因此苹果也有自己 ...
- 【转载】iOS屏幕适配设计
移动app开发中多种设备尺寸适配问题,过去只属于Android阵营的头疼事儿,只是很多设计师选择性地忽视android适配问题,只出一套iOS平台设计稿.随着苹果发布两种新尺寸的大屏iPhone 6, ...
- iOS 屏幕适配:autoResizing autoLayout和sizeClass
1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基 ...
- IOS - 屏幕适配
原文:Beginning Auto Layout Tutorial in iOS 7: Part 1 感谢翻译小组成员@answer-huang(博客)热心翻译.如果您有不错的原创或译文,欢迎提交给我 ...
- iOS屏幕适配知识
一.旋转处理 第一步:注册通知 [[NSNotificationCenter defaultCenter] addObserver:self ...
- 转:iOS 屏幕适配,autoResizing autoLayout和sizeClass图文详解
1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基 ...
随机推荐
- JZ2440开发笔记(3)——配置TFTP
第一步: 1.关闭ubuntu的防火墙 ufw disable2.卸载了iptables apt-get remove iptables 1.用iptables -F这个命令来关闭防火 ...
- C++类型引用浅析
C++类型引用浅析 引言 从最早被Bjarne Stroustrup 发明,作为C语言的扩展,到广为人知C++98标准,再到最新的C++11.C++14和C++17标准,C++一直在不断地进步.演化. ...
- Clean Code – Chapter 4: Comments
“Don’t comment bad code—rewrite it.”——Brian W.Kernighan and P.J.Plaugher The proper use of comments ...
- ubuntu usb权限问题解决
在/etc/udev/rules.d/ 创建51-android.rules SUBSYSTEM==" SUBSYSTEM=="
- ACM2030_机内码
/* 汉字统计 问题说明 统计给定文本文件中汉字的个数. 输入 输入文件首先包含一个整数Ñ,表示测试实例的个数,然后是Ñ段文本. 产量 对于每一段文本,输出其中的汉字的个数,每个测试实例的输出 ...
- HDOJ-ACM1012(JAVA)
这道题很简单,主要是弄懂题意和注意输出: 输出的完整结果如下: n e - ----------- 0 1 1 2 2 2.5 3 2.666666667 4 2.708333333 5 2.7166 ...
- 在VirtualBox中安装了Ubuntu后,Ubuntu的屏幕分辨率非常小,操作非常不便。通过安装VirtualBox提供的“增强功能组件”,-摘自网络
在VirtualBox中安装了Ubuntu后,Ubuntu的屏幕分辨率非常小,操作非常不便.通过安装VirtualBox提供的“增强功能组件”,可以解决这一问题,并且使用非常方便. 一.环境 | En ...
- hdoj 1237 简单计算器
简单计算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- maven工程-eclipse红叹号
从公司代码库中check下一份完整代码,在其他开发机器上都能正确构建,唯独一台机器无法正确构建,查证了2个小时,最后还是死在了最基础的问题上 maven工程 工程如下,创建了一个新的maven工程,j ...
- 如何在Windows中打开多个Windows Media Player
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何在Windows中打开多个Windows Media Player.