Xcode 13 Vary For Traits

一、Size class

什么是Size Classes?

size classes也是出现在iOS8的功能,.xib文件也是可以使用的,但大部分情况还是基于SB来使用,从xcode6开始我们新建的xib或SB文件中对应的View下方显示wAny hAny,点击后发现是可以选择的,选择不同的情况,View又变成了不同的形状,这就是size classes。

也可以这么理解,size classes就是对设备的屏幕尺寸进行了抽象,宽高都分别用Regular、Compact来表示,我们其实不用太在意名称,只知道,以后不同的设备或者不同的状态(横竖屏)可以由这种描述来表示即可。
更多参考。://www.greatytc.com/p/576f9971e2cc

Device size classes

截屏2022-06-20 17.23.06.png

更多详细参考官方文档

二、 Vary Constraints In Xcode 13

Xcode的文档好像还没有跟上,但答案似乎是回到创建约束的Installed属性的变化。你会在尺寸检查器中发现:


image.png

实际的例子

如果我们需要将一个蓝色的View,在横竖屏情况下有不同的布局显示。如下图所示:一个在竖屏情况下居中显示,一个在横屏情况下左上角显示。

WechatIMG168.jpeg

分析一下:iphone竖屏情况下,所有的机型的size classes都是: width-Compact, height-Regular,所以我们只需要在width-Compact, height-Regular的条件下设置约束就好。而iPhone横屏情况下,一部分的机型是width-Compact, height-Compact,一部分机型是width-Regular, height-Compact,综合一下就是width-Any,height-Compact的条件下设置约束就可以。
接下来我们用xcode13来构建约束吧!
1、首先按常规的操作,用Xib设置好约束。

截屏2022-06-21 09.41.44.png

2、勾掉右边的install
展开左侧栏的约束,分别选中对应约束,勾选掉installed
截屏2022-06-21 10.03.01.png

默认的installed被勾选,意思就是约束对所有的size classes约束都生效,所以为了实现最初的需求,我们首先把View.centerX=centerX,View.centY=centerY的installed,因为我们的需求并不区分大小,所以height=200,width=200的installed就不需要勾选
3、添加你需要的installed
选中相应的约束,点击右侧的+号
截屏2022-06-21 10.11.33.png

选择Width-Compact,Height-Regular之后,Add Variation。并勾选wC hR installed。
[图片上传中...(截屏2022-06-21 10.17.11.png-96d92e-1655777836782-0)]

截屏2022-06-21 10.17.45.png

做完以上的设置,我们已经完成了对竖屏下的布局约束,接下来继续对横屏下的布局约束进行设置
4、设置横屏
旋转之xib面板为横屏,然后按照重复之前的操作,添加Width-Any,Height-Compact installed


截屏2022-06-21 10.23.59.png
截屏2022-06-21 10.25.29.png

三、UITraitCollection

UITraitCollection为表征 size class 而生,用来区分设备。你可以在它身上获取到足以区分所有设备的特征。

@protocol UITraitEnvironment <NSObject>
@property (nonatomic, readonly) UITraitCollection *traitCollection 
NSLog(@"%@",self.traitCollection);

控制台打印:
<UITraitCollection: 0x600002a27d40; UserInterfaceIdiom = Phone, DisplayScale = 2, DisplayGamut = P3, HorizontalSizeClass = Compact, VerticalSizeClass = Regular, UserInterfaceStyle = Light, UserInterfaceLayoutDirection = LTR, ForceTouchCapability = Unavailable, PreferredContentSizeCategory = L, AccessibilityContrast = Normal, UserInterfaceLevel = Base>

    if (self.traitCollection.horizontalSizeClass==UIUserInterfaceSizeClassCompact&&self.traitCollection.verticalSizeClass==UIUserInterfaceSizeClassRegular&&self.traitCollection.userInterfaceIdiom == UIUserInterfaceIdiomPhone) {
        NSLog(@"竖屏");
    }else{
        NSLog(@"横屏");
    }

可以通过子类重写如下方法的方式监控 traitCollection 属性的变化

- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
    [super traitCollectionDidChange:previousTraitCollection];
    if (@available(iOS 12.0, *)) {
        if(self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleLight){
            NSLog(@"浅色模式");
        }else if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark){
            NSLog(@"深色模式");
        }
    } else {

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