UITraitEnvironment Protocol

3,385 阅读1分钟

使你的应用可使用iOS接口环境的一组方法。

概述

iOS接口环境包括诸如横向和纵向尺寸、显示比例和用户界面习惯用法等。要访问遵守此协议的对象的trait环境,请使用traitCollection属性。该协议还提供了一种当接口环境发生变化时被系统调用的可覆盖方法。实现此方法作为创建自适应iOS应用程序的一部分。

有关trait collection的更多信息,请参阅UITraitCollection。有关在iOS中创建自适应界面的WWDC 2014演示文稿,请参阅使用UIKit构建自适应应用程序

专题

一、访问Trait Collection

var traitCollection: UITraitCollection

一个View Controller(UIViewController类或其子类的实例)或一个View(UIView类或其子类的实例)的trait collection。

声明
var traitCollection: UITraitCollection { get }
说明

view controllers和views都遵守UITraitEnvironment协议。

重要

直接使用traitCollection属性。 不要重写它。 不要提供自定义实现。

二、响应接口环境的变化

func traitCollectionDidChange(UITraitCollection?)

iOS接口环境发生变化时调用。

声明
func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)
参数
说明

当iOS接口环境发生变化时,系统会调用此方法。根据你的应用程序的需求,在view controller和view中实现此方法,以响应此类更改。例如,当iPhone从纵向旋转到横向时,你可以调整view controller下子视图的布局。此方法的默认实现为空。

在实现的开始阶段,请调用super以确保视图层次结构中较高的界面元素有机会首先调整其布局。使用上与下面代码类似:

- (void) traitCollectionDidChange: (UITraitCollection *) previousTraitCollection {
    [super traitCollectionDidChange: previousTraitCollection];
    if ((self.traitCollection.verticalSizeClass != previousTraitCollection.verticalSizeClass)
        || (self.traitCollection.horizontalSizeClass != previousTraitCollection.horizontalSizeClass)) {
        // your custom implementation here
    }
}