- 主要步骤:
- 设计不同布局:根据不同的Trait Collection(如紧凑宽度、紧凑高度等)设计相应的界面布局。例如,在横屏和竖屏时,可能需要不同的视图排列方式。
- 创建布局约束:使用Auto Layout创建约束来定义视图之间的关系。这些约束需要能够根据Trait Collection的变化进行动态调整。比如,可以通过优先级不同的约束来实现不同布局下视图的不同展现。
- 设置布局环境:在视图控制器中设置合适的布局环境,以便系统能够根据Trait Collection应用相应的布局。
- 监听Trait Collection变化及更新界面(Objective - C代码):
- 重写方法:在视图控制器中重写
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection
方法。这个方法会在Trait Collection发生变化时被调用。
- 判断变化:在方法内部,可以通过比较当前的
self.traitCollection
和previousTraitCollection
来判断具体哪些Trait发生了变化。例如:
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
[super traitCollectionDidChange:previousTraitCollection];
if ([self.traitCollection hasDifferentColorAppearanceComparedToTraitCollection:previousTraitCollection]) {
// 颜色外观发生变化,更新相关界面元素的颜色
}
if (self.traitCollection.verticalSizeClass != previousTraitCollection.verticalSizeClass) {
// 垂直尺寸类发生变化,调整布局
}
}
- 更新界面:根据Trait的变化,更新界面布局或相关元素的属性。比如,如果是尺寸类变化,可以重新激活或失效某些约束,以使视图按照新的布局要求显示:
if (self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassCompact) {
// 水平尺寸紧凑,更新布局
[self.view removeConstraint:self.oldConstraint];
[self.view addConstraint:self.newCompactWidthConstraint];
[self.view setNeedsLayout];
} else {
// 水平尺寸正常,恢复布局
[self.view removeConstraint:self.newCompactWidthConstraint];
[self.view addConstraint:self.oldConstraint];
[self.view setNeedsLayout];
}