我的应用程序有一个多窗格教程样式的视图,用户可以通过该视图了解该应用程序。这与described in this tutorial非常相似。在为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磅的空白区域。转换完成后,它会进入正确的布局。
这可能是iOS 8中的错误吗?我现在完全没猜到了。
答案 0 :(得分:112)
我发现你需要在视图上建立约束,而不是视图控制器的布局指南。这将确保您的视图控制器遵守您在PageViewController中转换之前设置的约束。
你可以这样做:
请记得取消选中“限制到边距”
答案 1 :(得分:41)
对于有这个问题的人来说,对我而言,似乎是我正在“相对于保证金”(iOS 8中的一项新功能)布置视图。
而不是:
使用:
答案 2 :(得分:2)
我几天都在努力解决这个问题。
我尝试通过从故事板中实例化ViewController页面来实现它。有一个明确的大小调整发生。检查
中的帧大小在 1 和 3 的调用之间,帧大小始终会发生变化。有时在 2 之前,有时在之后。
如果您还在使用故事板,我可以通过将页面UI元素提取到自己的XIB文件中来解决问题,在IB中设置约束,然后通过调用 创建页面initWithNibName 即可。
不是一个完整的答案,但它让我觉得很有成效。 希望它有所帮助。
答案 3 :(得分:1)
对我来说,解决办法是将tableView的顶部固定到superview: 编辑 - > Pin - >顶级空间到SuperView(iOS8)
答案 4 :(得分:0)
这是iOS 8中的一个错误,但我找到了一个解决方法:
在Storyboard的状态栏顶部添加一个空视图。视图的高度应该与正在移动的对象的y值一样多。