适配分屏模式, 是提升iPad体验利器之一.
首先要了解这个系统类 UITraitCollection
顾名思义 特征集. 它封装了几乎所有当前window的特性.
我们需要先了解 SizeClass 中的 horizontalSizeClass 和 vericalSizeClass, 他们分别封装了所有设备的长宽SizeClass.
而这里又分为两种类型. Regular
和 Compact
.
常规状态和压缩状态. 入下图所示. 不同的长宽都对应不同的格式.
既然是分屏, 分屏就代表了多应用. 那么多应用的长宽, 也可以通过SizeClass表示. 如下图所示.
经过观察后发现, 原来我们只要通过判断水平方向的SizeClass就可以适配所有情况了!!!
- 通过监听系统回调, 通知改变界面适配
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
[super traitCollectionDidChange:previousTraitCollection];
}
- 获取当前horizontalSizeClass去适配
UITraitCollection *trait = appDelegate.window.traitCollection;
switch (trait.horizontalSizeClass) {
case UIUserInterfaceSizeClassUnspecified:
case UIUserInterfaceSizeClassCompact: self.currentSplitDisplayMode = SHMDeviceSplitDisplayMode_CompactWidth; break;
case UIUserInterfaceSizeClassRegular: self.currentSplitDisplayMode = SHMDeviceSplitDisplayMode_RegularWidth; break;
default: break;
}
- 判断当前是否分屏
if (@available(iOS 13.0, *)) return trait.userInterfaceLevel == UIUserInterfaceLevelElevated ;
else return (trait.horizontalSizeClass == UIUserInterfaceSizeClassCompact || trait.verticalSizeClass == UIUserInterfaceSizeClassCompact);
摘自
UITraitCollection .
Adopting Multitasking Enhancements on iPad