【发布时间】:2015-09-24 10:43:57
【问题描述】:
我有一个嵌入在 UINavigationController 中的视图控制器之间的自定义推送转换,它在使用 iOS 7/8 构建时工作正常,但在针对 iOS 9 SDK 构建时呈现错误的布局。
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
[transitionContext.containerView addSubview:toViewController.view];
...
然后它继续执行动画。问题是toViewController 的内容,即使它使用了右上布局指南自动布局约束,也会呈现导航栏后面的内容。
尽管如此,它在 iOS 8 上运行良好,如果我们强制重绘(例如,将应用程序发送到后台并将其带回,在顶部显示模式并关闭它等)将导致整个自动布局系统重绘自身,toViewController 的视图跳转到正确的位置(作为顶部布局指南,导航栏的 x 像素而不是设备屏幕顶部的 x 像素)。
添加
[self.view setNeedsUpdateConstraints];
[self.view layoutIfNeeded];
如果放入 viewDidAppear:animated 则有效,但不适用于 viewDidLoad 或 viewWillAppear:animated。这不是一个解决方案,因为用户会在 viewDidAppear:animatedviewDidAppear:animated 发生重绘时看到视图跳跃
【问题讨论】:
标签: ios uinavigationcontroller ios9 custom-transition