Size Classes

目录

1 SizeClasses简介
2 SizeClasses与AutoLayout
3 SizeClasses与设备size
4 SizeClasses与assets
5 SizeClasses与Constraints
6 SizeClasses适用场景
7 SizeClasses代码使用

参考资料

WWDC 2014 Session笔记 - iOS界面开发的大一统
iOS8 Size Classes初探

缩写词

Any:A
Regular:R
Compact:C

<a id="2-SizeClasses简介"></a>SizeClasses简介

Size Classes 为 iOS 8 的新特性,其特点就是将各个设备屏幕及其旋转后状态都抽象成屏幕Size的变化,而不再关心具体的尺寸。具体就是将屏幕的宽度抽象成Compact(紧凑型)、Any(任意)、Regular(常规)三种情况,高度也是如此,因此就有9种情况。简单的说,就是在一个Storyboard或者xib上,能够管理9种类型的视图。

<a id="3-SizeClasses与AutoLayout"></a>SizeClasses与AutoLayout

  1. Size Classes只是将视图分类,AutoLayout才是对视图进行布局
  2. Size Classes依赖于AutoLayout。关闭AutoLayout,则Size Classes无法开启。关闭Size Classes,对AutoLayout无影响。

<a id="4-SizeClasses与设备size"></a>SizeClasses与设备size


如果没有特殊指定Size的类型,则默认是在 wAny hAny 模式下设置。其它8种类型继承于这个类型。

  1. 在storyboard中添加一个imageView,将imageView的图片设置如下。对图片设置好约束后,可以在Xcode右侧的属性选项中看到 installed ,默认表示为 AA。我们可以看到下面Preview内容在所有设备类型中都是显示这张图片。

  2. 现在我们来对imageView进行操作,点击 installed 左边的 ,添加 C R 类型的视图 (C R)。

  3. 取消 C R 的打勾项☑️,此时我们可以从Preview中看到Size类型为C R 的都不显示imageView。

  4. 只有选择installed之后,图片才会被绘制在View上,如果没有选择installed,则不会绘制在View上,左图为选择installed,右图没有选择installed:


简单的三个步骤,我们就能实现 imageView 在 ipad 竖屏上显示,在iphone竖屏不显示。
同理,如果你想让 imageView 只在 iphone 竖屏上,则将默认的installed(第一个)取消打勾,然后对 C R的 installed 打勾。

再举个简单的例子:

  1. 现在我们想让 imageView 只在 iphone 6Plus(5.5寸)横屏上不显示图片。我们可以如下操作:


  2. 然后在右边中添加 RC 的installed,取消打勾,此时效果如下,只有 6Plus 无法显现imageView。

<a id="5-SizeClasses与assets"></a>SizeClasses与assets

不仅视图可以用Size Classes来进行抽象分类,Image Asset也能支持Size Classes,用法类似。如下图:


通过选择Width和Height的类型可以设置不同类型对应不同的图片 (*表示A、+表示R、-表示C),例如:

不过设置assets的时候不能通过Preview来实时观察图片的变化,所以只能运行模拟器,可以发现选择的时候会默认改变图片:


我们可以打开image的content.json,查看里面的具体内容:


可以发现,image的content.json数据中,1x的图片多出了"width-class"和"height-class"两个键值。


可以看到,旋转时候如果想要改变图片,我们再也不用

<a id="6-SizeClasses与Constraints"></a>SizeClasses与Constraints

前面提到,Size Classes是依赖于AutoLayout,所以设置Constraint的时候也可以设置Size Classes的类型,例子如下:

  1. 回到storyboard,点击其中的一条约束,如下图:


  2. 添加 R C 的约束:

  3. 在Preview中可以看到,6Plus横屏下image的高度变成200。

<a id="7-SizeClasses适用场景"></a>SizeClasses适用场景

  1. 同个工程,同一个视图,不同设备上(iPhone,iPad)显示或隐藏;
  2. 多种屏幕类型中使用同一个imageView,但图片不同;
  3. 多种屏幕类型中使用同一个视图,但视图的约束不一致。

<a id="8-SizeClasses代码使用"></a>SizeClasses代码使用

为了 Size Classes,Apple 在 iOS 8 中引入了一个新的类,UITraitCollection。这个类封装了像水平和竖直方向的 Size Class 等信息。

iOS 8 的 UIKit 中大多数 UI 的基础类 (包括 UIScreen,UIWindow,UIViewController 和 UIView) 都实现了 UITraitEnvironment 这个接口,通过其中的 traitCollection 这个属性,我们可以拿到对应的 UITraitCollection 对象,从而得知当前的 Size Class,并进一步确定界面的布局。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容