我在嵌入的视图控制器之间有一个自定义的推送转换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 像素)。
Adding
[self.view setNeedsUpdateConstraints];
[self.view layoutIfNeeded];
如果放入即可工作viewDidAppear:animated
,但不适用于viewDidLoad
or viewWillAppear:animated
。这不是一个解决方案,因为当重绘发生时用户会看到视图跳跃viewDidAppear:animated
我已经通过之前添加以下行来解决我的问题addSubview:
:
toViewController.view.frame = [transitionContext finalFrameForViewController:toViewController];
来自 Apple 的文档FinalFrameForViewController: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewControllerContextTransitioning_protocol/#//apple_ref/occ/intfm/UIViewControllerContextTransitioning/finalFrameForViewController:
返回指定视图控制器的结束框架矩形
看法。
该方法返回的矩形代表大小
转换结束时的相应视图。为了景观
在演示过程中被覆盖,返回的值
方法可能是 CGRectZero 但它也可能是一个有效的框架
长方形。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)