【发布时间】:2021-07-17 12:17:20
【问题描述】:
我正在探索在从纵向旋转到横向时,viewWillTransitionToSize 中是否可以准确地知道景观“安全区域插图”。
我看过这个 SO 答案,它的代码是一个伪代码:https://stackoverflow.com/a/46581783/2567725
在我的 iPhone XR 插图中,{48, 0, 34, 0} 用于纵向,{0, 48, 21, 48} 用于横向。
像这样:
当旋转设备时——从纵向到横向——我在animateAlongsideTransition 中记录了“未来”插图,它们是正确的。
问题是,为什么这些正确的值是从FromViewControllerKey,而不是从ToViewControllerKey:
- (void)logSafeAreaInsets:(id<UIViewControllerTransitionCoordinatorContext>)context
{
UIInputViewController* vcFrom = [context viewControllerForKey:UITransitionContextFromViewControllerKey];
UIEdgeInsets iiFrom = vcFrom.view.safeAreaInsets;
UIInputViewController* vcTo = [context viewControllerForKey:UITransitionContextToViewControllerKey];
UIEdgeInsets iiTo = vcTo.view.safeAreaInsets;
NSLog(@"TADAM from=%@ to=%@", NSStringFromUIEdgeInsets(iiFrom), NSStringFromUIEdgeInsets(iiTo));
}
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
[self logSafeAreaInsets:context];
} completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
}];
}
对于ToViewControllerKey,它们是{0, 0, 0, 0}!
日志如下所示:
TADAM from={0, 48, 21, 48} to={0, 0, 0, 0}
据我了解,ToViewControllerKey 是横向 VC(旋转后),FromViewControllerKey 是纵向 VC(旋转前)。
所以我可以得到我想要的UIViewControllerTransitionCoordinatorContext,但是它的逻辑似乎是错误的:
- 为什么从
FromVC而不是ToVC检索真正的风景插图? - 为什么
ToVC的插入在animateAlongsideTransition中为零?
【问题讨论】:
标签: ios uiviewcontroller screen-rotation safearealayoutguide