一、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的用法:

  • 直接建立约束条件

    1. [self.view addConstraint: [NSLayoutConstraint
    2. constraintWithItem:blueView
    3. attribute:NSLayoutAttributeLeft
    4. relatedBy:NSLayoutRelationEqual
    5. toItem:redView
    6. attribute:NSLayoutAttributeLeft
    7. multiplier:
    8. constant:]];

    这样虽然代码量比较大,但是是绝对可行的办法,也是使用autoLayout最根本的办法之一。

  • 使用VFL语言
    1. - (void)viewDidLoad {
    2. [super viewDidLoad];
    3. UIButton *button=[[UIButton alloc]init];
    4. [button setTitle:@"点击一下" forState:UIControlStateNormal];
    5. button.translatesAutoresizingMaskIntoConstraints=NO;
    6. [button setBackgroundColor:[UIColor blackColor]];
    7. [self.view addSubview:button];
    8. NSArray *constraints1=[NSLayoutConstraint
    9. constraintsWithVisualFormat:@"H:|-[button]-|"
    10. options:
    11. metrics:nil
    12. views:NSDictionaryOfVariableBindings(button)];
    13. NSArray *constraints2=[NSLayoutConstraint
    14. constraintsWithVisualFormat:@"V:|-20-[button(==30)]"
    15. options:
    16. metrics:nil
    17. views:NSDictionaryOfVariableBindings(button)];
    18. [self.view addConstraints:constraints1];
    19. [self.view addConstraints:constraints2];
    20. }
    1.  
  • 使用使用第三方库,如:MasonryUIView+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.png

对sizeClass的理解:
sizeClass的实质是将iOS屏幕分成了不同的抽象概念,这些不同的抽象组合,对应着不同的设备屏幕。所以,利用sizeClass可以针对同一套UI,来适配所有的屏幕。注意:这些所有的适配,都是利用autoLayout来实现的,sizeClass只是负责提供不同的屏幕尺寸。

原文地址:http://www.jianshu.com/p/10d7038c78ae

【转】iOS屏幕适配的更多相关文章

  1. iOS屏幕适配

    ## iOS屏幕适配 ### iOS屏幕适配发展史 1> iPhone4以前(没有iPad) * 不需要屏幕适配 2> iPad.iPhone5等设备出现 * 需要做横竖屏适配 * aut ...

  2. Auto Layout 在iOS屏幕适配中的使用

    前几天在做iOS屏幕的适配,也就是让同样的UI控件的布局在不同屏幕的iOS设备上面都正确显示,storyBoard就无可避免的用到了Auto Layout.在这个过程中,我发现要熟练掌握Auto La ...

  3. iOS屏幕适配-iOS笔记

    学习目标 1.[了解]屏幕适配的发展史 2.[了解]autoResizing基本用法 3.[掌握]autoLayout 的基本用法 4.[掌握]autoLayout代码实现 5.[理解]sizeCla ...

  4. iOS屏幕适配方案-Auto Layout

    市场上的android手机五花八门.各种尺寸的屏幕让android程序员们比較头疼. 也有一些大神写了一些博客提出了自己的观点.iOS貌似也迎来了大屏6+,因此屏幕适配的问题也是有滴,因此苹果也有自己 ...

  5. 【转载】iOS屏幕适配设计

    移动app开发中多种设备尺寸适配问题,过去只属于Android阵营的头疼事儿,只是很多设计师选择性地忽视android适配问题,只出一套iOS平台设计稿.随着苹果发布两种新尺寸的大屏iPhone 6, ...

  6. iOS 屏幕适配:autoResizing autoLayout和sizeClass

    1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基 ...

  7. IOS - 屏幕适配

    原文:Beginning Auto Layout Tutorial in iOS 7: Part 1 感谢翻译小组成员@answer-huang(博客)热心翻译.如果您有不错的原创或译文,欢迎提交给我 ...

  8. iOS屏幕适配知识

    一.旋转处理    第一步:注册通知 [[NSNotificationCenter defaultCenter] addObserver:self                            ...

  9. 转:iOS 屏幕适配,autoResizing autoLayout和sizeClass图文详解

    1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基 ...

随机推荐

  1. linux驱动程序之电源管理 之linux休眠与唤醒(2)

    在Linux中,休眠主要分三个主要的步骤:(1)冻结用户态进程和内核态任务:(2)调用注册的设备的suspend的回调函数:(3)按照注册顺序休眠核心设备和使CPU进入休眠态.       冻结进程是 ...

  2. makefile for VCS from Syn@psys

    已调试通过 未来将修改成verdi的FSDB版本 下载后把 Makefile_VCS.txt 修改为 Makefile 就可以使用 链接地址: http://files.cnblogs.com/all ...

  3. 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程05:技能读表》

    5.技能读表 技能读表概述: 技能读表,作为实现技能系统更为快捷的一种方式,被广泛应用到游戏开发中.技能配表,作为桥梁连接着游戏策划者和开发者在技能实现上的关系.在游戏技能开发中,开发者只需要根据策划 ...

  4. poj 3984 迷宫问题【bfs+路径记录】

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10103   Accepted: 6005 Description ...

  5. hdu4433 locker

    暴力dp.. dp[i][j][k] 表示 前i位完全匹配 j 表示i+1位 k表示i+2位 枚举j k #include<iostream> #include<cstdio> ...

  6. localtunnel.me 原理流程浅析

      本文採用知识共享署名-同样方式共享 4.0 国际许可协议进行许可. 近期公司的项目须要一个后台server,要求能将内网的WEBserver暴露在外网上.于是.就在网上到处搜开源项目.找到两个口碑 ...

  7. 快速高效的破解MySQL本地和远程密码

    http://www.kankanews.com/ICkengine/archives/212.shtml 快速的 MySQL 本地和远程密码破解!首先需要对数据库维护人员说明的是,不必紧张,你无需修 ...

  8. CLOSE_WAIT状态的原因与解决方法 --转

    转自:http://blog.chinaunix.net/uid-20357359-id-1963662.html 这个问题之前没有怎么留意过,是最近在面试过程中遇到的一个问题,面了两家公司,两家公司 ...

  9. Servlet中字节字符流的输出

    public class OutServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServ ...

  10. 初识jsp

    复习: 1.servlet生命周期: (1)默认是以第一次请求的时候创建并初始化Servlet,而且只做一次.(构造函数 init()) web.xml(配置后,是可以达到在服务启动后,立刻进行ser ...