viewWillTransitionToSize:与 willTransitionToTraitCollection:

Posted

技术标签:

【中文标题】viewWillTransitionToSize:与 willTransitionToTraitCollection:【英文标题】:viewWillTransitionToSize: vs willTransitionToTraitCollection: 【发布时间】:2015-10-27 20:19:04 【问题描述】:

谁能解释这两种方法之间的区别? The docs for UIViewController 明确声明 viewWillTransitionToSize 应该用于管理旋转,但是点击到 UIContentContainer page,willTransitionToTraitCollection 方法会让人感到困惑。

我想我理解大小类更改(特征集合更改)和大小更改之间的概念差异,但我不确定在哪种情况下实施哪种方法。 UIKit 向导的说明会很有帮助!

【问题讨论】:

【参考方案1】:

当您想要对用户旋转设备做出响应时,您应该使用viewWillTransitionToSize,如果您这样做了,那么您肯定会执行您的操作,因为每次您的应用程序的窗口改变大小时都会调用它。

如果您只想在 trait 集合发生更改时采取行动,例如,如果您为 Compact 大小类设置了某个 collectionViewLayout,而您想为 Regular 使用另一个 willTransitionToTraitCollection

如果特征集合发生变化,那么大小也会发生变化。但反过来也行不通。纵向 iPad 和横向 iPad 具有相同的特征,但尺寸不同。将多任务添加到组合中,您将拥有多种尺寸,只需映射到两个 traitCollection 尺寸类。

【讨论】:

我想问,为了在设备旋转发生时有不同的布局,我们更新willTransitionToTraitCollection而不是traitCollectionDidChange中的约束,对吧?还是没关系? 对于旋转,您将在viewWillTransitionToSize 中更新,取决于设备,当设备旋转时您可能不会获得新的特征集合。例如,iPad 全屏应用在两个方向上都是 Regular/Regular 那么viewWillTransitionToSizewillTransitionToTraitCollection有什么区别?什么时候使用一个而不是另一个? 我现在看到 viewWillTransitionToSize 没有给我关于下一个 traitCollection 的信息,所以我不能 - 例如 - 知道我是否在 iPhone 设备中从纵向旋转到横向。所以在这种情况下我应该使用willTransitionToTraitCollection,对吧?

以上是关于viewWillTransitionToSize:与 willTransitionToTraitCollection:的主要内容,如果未能解决你的问题,请参考以下文章

viewWillTransitionToSize:withTransitionCoordinator: 未调用

为啥 `viewWillTransitionToSize` 中检索 SafeAreaInsets 的逻辑略有错误?

ViewWillTransitionToSize 在 Swift 3 中出现故障?

viewWillTransitionToSize 返回 iPhone 12 pro max 的错误尺寸 [重复]

viewWillTransitionToSize:withTransitionCoordinator: 和 layoutSubviews: 之间的交互

Swift viewWillTransitionToSize 不使用分屏调用