iOS 8 UIPageViewController在转换后应用约束
我的应用程序有一个多窗格教程式的视图,用户通过滑动来了解应用程序。 如本教程中所述,这非常实现。 实施了iOS 7和8之后,我正在比较它们是如何工作的,并发现了后者的问题 – 我在这里运行Xcode 6 GM。
看起来,UIPageViewController在转换完成后呈现视图。 我覆盖了委托方法,看看发生了什么事情:
- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers { NSLog(@"Frame size before: %@", NSStringFromCGRect([(UIViewController*)pendingViewControllers[0] view].frame)); } - (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed { NSLog(@"Frame size after: %@", NSStringFromCGRect([(UIViewController*)previousViewControllers[0] view].frame)); }
这里是一个示例输出:
Frame size before: {{0, 0}, {600, 600}} Frame size after: {{0, 0}, {320, 568}}
如下所示:向左滑动以拉取下一个视图,并在新视图的底部注意到一个32-pt的空白区域。 一旦转换完成,就会跳入正确的布局。
这可能是iOS 8中的一个错误吗? 在这一点上,我完全没有猜测。
我想你需要基于你的约束的视图,而不是你的视图控制器的布局指南。 这将确保您的视图控制器尊重您在PageViewController中转换之前设置的约束。
你可以这样做:
请记住取消选中“限制边距”
对于有这个问题的人来说,对我来说,我似乎是在“相对于保证金”(iOS 8中的一个新function)中列出观点。
代替:
使用:
我一直在为此挣扎几天。
我试图通过从故事板实例化页面ViewController来实现它。 有一个确定的大小发生。 检查帧的大小
- pageViewController:viewControllerAfterViewController
- pageViewController:willTransitionToViewControllers
- pageViewController:didFinishAnimating:previousViewControllers
帧的大小总是会在对1和3的调用之间改变。 有时在2之前,有时在之后。
如果您还使用故事板,则可以通过将页面UI元素提取到其自己的XIB文件中来解决问题,在IB中设置约束,然后使用initWithNibName调用创build页面。
不是一个完整的答案,但它让我感到高效。 希望它有帮助。
对我来说,解决的办法是将pinView的顶部视图添加到超级视图中:Editor – > Pin – > Top Space To SuperView(iOS8)
这是在iOS 8中的错误,但我find了一个解决方法:
在Storyboard的状态栏顶部添加一个空视图。 视图的高度应该与正在移动的对象的y值一样多。