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来实现它。 有一个确定的大小发生。 检查帧的大小

  1. pageViewController:viewControllerAfterViewController
  2. pageViewController:willTransitionToViewControllers
  3. pageViewController:didFinishAnimating:previousViewControllers

帧的大小总是会在对13的调用之间改变。 有时在2之前,有时在之后。

如果您还使用故事板,则可以通过将页面UI元素提取到其自己的XIB文件中来解决问题,在IB中设置约束,然后使用initWithNibName调用创build页面。

不是一个完整的答案,但它让我感到高效。 希望它有帮助。

对我来说,解决的办法是将pinView的顶部视图添加到超级视图中:Editor – > Pin – > Top Space To SuperView(iOS8)

这是在iOS 8中的错误,但我find了一个解决方法:

在Storyboard的状态栏顶部添加一个空视图。 视图的高度应该与正在移动的对象的y值一样多。

正确约束的图像