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
那么viewWillTransitionToSize
、willTransitionToTraitCollection
有什么区别?什么时候使用一个而不是另一个?
我现在看到 viewWillTransitionToSize
没有给我关于下一个 traitCollection 的信息,所以我不能 - 例如 - 知道我是否在 iPhone 设备中从纵向旋转到横向。所以在这种情况下我应该使用willTransitionToTraitCollection
,对吧?以上是关于viewWillTransitionToSize:与 willTransitionToTraitCollection:的主要内容,如果未能解决你的问题,请参考以下文章
viewWillTransitionToSize:withTransitionCoordinator: 未调用
为啥 `viewWillTransitionToSize` 中检索 SafeAreaInsets 的逻辑略有错误?
ViewWillTransitionToSize 在 Swift 3 中出现故障?
viewWillTransitionToSize 返回 iPhone 12 pro max 的错误尺寸 [重复]
viewWillTransitionToSize:withTransitionCoordinator: 和 layoutSubviews: 之间的交互