我的应用程序有一个多 Pane 教程式 View ,用户可以通过滑动来了解该应用程序。这与 described in this tutorial 的实现非常相似。 。在 iOS 7 和 8 上实现它后,我正在比较它们的工作方式,并发现后者的问题 - 我在这里运行 Xcode 6 GM。
看起来 UIPageViewController 正在转换完成后渲染 View 。我重写了委托(delegate)方法来查看发生了什么:
- (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}}
其表现如下:向左滑动以拉入下一个 View ,并注意新 View 底部的 32 磅空白。一旦转换完成,它就会猛然进入正确的布局。
这可能是 iOS 8 中的一个错误吗?我现在已经无法猜测了。
最佳答案
我发现您需要将约束基于 View 而不是 View Controller 的布局指南。这将确保您的 View Controller 遵守您在 PageViewController 中转换之前设置的约束。
你可以这样做:
记住取消选中“限制边距”
关于autolayout - iOS 8 UIPageViewController 在转换后应用约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25791183/