iOS 8 AutoLayout与Size Class自悟

转载 2016年06月02日 10:05:13

前言

iOS8和iPhone6发布已经过去蛮久了,广大的果粉终于迎来了大屏iPhone,再也不用纠结为大屏买三星舍苹果了…但是对于iOS开发人员来说,迎来了和Android开发开发一样的问题—>各种屏幕的适配(是不是可以要求加工资的节奏).对于适配,网传各种有关Size Class的论点,前段时间太忙,一直没去研究,套用+总的话,苹果在适配方面提供的方法做的比安卓好太多了.自己实测之后,确实很方便0.0(不过,还是想说,适配的核心始终是AutoLayout)

023.png

概念初探

iOS8之前,公司在开发项目时,先做的iPhone版,然后要求开发iPad版本,其实内容是完全一样的,只是UI变化了,但是我们就需要建立2个工程来分别对应实现.iOS8推出的Size Class,可以让我们在一个工程的storyboard中进行所有尺寸屏幕的适配,不仅是iPhone 4s-5/5s-6-6 Plus,还包括iPad界面.它引入了一种新的概念,抛弃传统意义上我们适配时所谓的具体宽高尺寸,把屏幕的宽和高分别分成两种情况:Compact-紧凑, Regular-正常(Any-任意,其实就是这2种的组合,所以我没分成3种情况).搭配起来是3*3,也就是无论如何变化,加起来也就9种,如上图. 

1.实际应用中,这Compact,Any,Regular如何运用呢?

w:Any h:Any 是我们刚建立工程时候默认选择的,算是一切描述的父类.其他的种类描述都是在此基础上变化的,比如:如果weight设为Any,height设置为Regular,那么在该状态下的界面元素在只要height为Regular,无论weight是Regular还是Compact的状态中都会存在.于是:

w:Compact h:Compact - (w:Any h:Compact , w:Compact h:Any , w:Any h:Any)

w:Regular h:Compact - (w:Any h:Compact , w:Regular h:Any , w:Any h:Any)

w:Compact h:Regular - (w:Any h:Regular , w:Compact h:Any , w:Any h:Any)

w:Regular h:Regular - (w:Any h:Regular , w:Regular h:Any , w:Any h:Any) 

2. 再来看一组数据和一张图(国外一位博主给出的,很形象):

iPhone4S,iPhone5/5s,iPhone6

竖屏:(w:Compact h:Regular)

横屏:(w:Compact h:Compact)

iPhone6 Plus

竖屏:(w:Compact h:Regular)

横屏:(w:Regular h:Compact)

iPad

竖屏:(w:Regular h:Regular)

横屏:(w:Regular h:Regular)

size_classes.png

3.可以总结为: 

  • 如果项目不支持横屏显示,使用w:Compact h:Regular(或者直接取消使用Size Class) 

  • 如果项目支持横屏显示,使用w:Compact h:Regular+w:Any h:Compact 

  • 对于一些公有的约束(任意组合中都适用),一般放在w:Any h:Any中设置 

  • iPad同理

所以,我觉得Size Class最大的帮助是,解决横屏适配和iPhone iPad共享一个设计板…(个人意见) 

试验反馈一

1.首先,先建立一个工程,展开如下页面

02.png

PS:这是iOS8的新特性,真的用到项目里需要等放弃兼容iOS7 。。。显然,目前还是不行的 

2.在Any Any情况下,放置一个Label,并设置约束上-左-下-右为0-0-20-0

 03.png

04.png

3.在Compact Any情况下,又放置一个Label,并设置约束上为20

 05.png

4.继续在Compact Any情况下,来看看横屏状态下的变化

 06.png

5.最后切换到Regular Any下,完成6 Plus 的横屏显示

 07.png

试验反馈二

试验一里面,验证了一下概念中所列举的各个屏幕适用的组合,接下来,算是Size Class 解决横屏的妙用

 08.png

11.png


PS:运用于,横屏适配,重新排版竖屏时候的UI布局 

除了改动不同组合下约束,也能改动控件在不同组合下是否显示

试验反馈三

AutoLayout这里不给具体如何设置,因为不知道如何写,感觉还是大家多动手去写,去试,最有效了

下面给出AutoLayout设置的图解

简答测试Demo结果图:

17.png

如果不横屏,也可以直接取消Size Classes(图不一样,不同时间写的…囧)

 18.png

最终Demo

Demo的Github地址:https://github.com/ConanMTHu/Size-Classes-Demo/tree/master

 20.gif



总结

直接说以后都应该使用storyboard+autolayout感觉是不负责的说法,但是深入思考autolayout是很有必要的!

如下情况使用autolayout会有帮助: 

  • 当需要展示的内容很多并且尺寸不固定; 

  • 程序需支持屏幕旋转(主要是iPad程序,iPhone程序横屏的场景有点非主流,也不排除..手游..); 

  • 程序通用于iPhone和iPad(最重要的吧). 

iOS使用autolayout和sizeclass 解决适配问题(一)

一。为啥使用autolayout?使用 autolayout 有什么好处?      随着iPhone的种类不断增多,不同尺寸、不同分辨率的iOS设备将会越来越多,使用传统frame布局的工作量必...
  • Shave_Kevin
  • Shave_Kevin
  • 2015年08月31日 22:46
  • 1702

xcode6中自动布局autolayout和sizeclass的使用

一、关于自动布局(Autolayout) 在Xcode中,自动布局看似是一个很复杂的系统,在真正使用它之前,我也是这么认为的,不过事实并非如此。 我们知道,一款iOS应用,其主要UI组件是由一个个相...
  • lihuiqwertyuiop
  • lihuiqwertyuiop
  • 2014年09月15日 10:19
  • 19157

利用AutoLayout uilabel文字自动适应大小,宽度

相比大家会经常遇到  label  或则  textfield等显示文字的  视图时,显示不全,或者无法自动 变化长度  ,自动改变字体的 设置: 今天给大家演示一下,如何 在autolayout让l...
  • PZ0605
  • PZ0605
  • 2015年08月05日 23:16
  • 4918

iOS8 AutoLayout与Size Class 自悟

前言 iOS8和iPhone6发布已经过去蛮久了,广大的果粉终于迎来了大屏iPhone,再也不用纠结为大屏买三星舍苹果了…但是对于iOS开发人员来说,迎来了和Android开发开发一样的问题—>...
  • chengkaizone
  • chengkaizone
  • 2015年05月15日 15:27
  • 604

iOS 8 AutoLayout与Size Class自悟

前言 iOS8和iPhone6发布已经过去蛮久了,广大的果粉终于迎来了大屏iPhone,再也不用纠结为大屏买三星舍苹果了…但是对于iOS开发人员来说,迎来了和Android开发开发一样的问题—>...
  • zhaojian3513012
  • zhaojian3513012
  • 2015年07月16日 10:27
  • 372

iOS 8 AutoLayout与Size Class自悟---cocoachina

http://www.cocoachina.com/ios/20141217/10669.html iOS8和iPhone6发布已经过去蛮久了,广大的果粉终于迎来了大屏iPhone,再也不用...
  • u012338816
  • u012338816
  • 2016年03月09日 13:55
  • 187

(转)iOS 8 AutoLayout与Size Class自悟

iOS8和iPhone6发布已经过去蛮久了,广大的果粉终于迎来了大屏iPhone,再也不用纠结为大屏买三星舍苹果了…但是对于iOS开发人员来说,迎来了和Android开发开发一样的问题—>各种屏幕的适...
  • start313
  • start313
  • 2015年03月10日 16:43
  • 283

iOS8开发~UI布局(二)storyboard中autolayout和size class的使用详解

一、概要 1、Xcode6中storyboard
  • zfpp25_
  • zfpp25_
  • 2014年10月09日 15:37
  • 4046

iOS 8 AutoLayout与Size Class有感笔记

iOS8和iPhone6发布已经过去蛮久了,广大的果粉终于迎来了大屏iPhone,再也不用纠结为大屏买三星舍苹果了…但是对于iOS开发人员来说,迎来了和Android开发开发一样的问题—>各种屏幕的适...
  • sammyieveo
  • sammyieveo
  • 2015年01月06日 18:24
  • 398

iOS 8 AutoLayout与Size Class

iOS8和iPhone6发布已经过去蛮久了,广大的果粉终于迎来了大屏iPhone,再也不用纠结为大屏买三星舍苹果了…但是对于iOS开发人员来说,迎来了和Android开发开发一样的问题—>各种屏幕的适...
  • wangzhaobin
  • wangzhaobin
  • 2015年04月08日 15:58
  • 522
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS 8 AutoLayout与Size Class自悟
举报原因:
原因补充:

(最多只允许输入30个字)