3

在 pageViewController:viewControllerAfterViewController: 方法中,就在 return 语句之前,即将作为下一页返回的视图具有正确的视图框架大小。

然而,在调用 pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted: 方法后,我检查了新引入的视图控制器 ([pageViewController2.viewControllers objectAtIndex:0];) 的帧大小,发现它调整了大小。

请注意,对于新创建的 ViewController,我已将 [self.pageViewController.view setAutoresizesSubviews:NO] 和自动调整大小掩码设置为 None。

有什么想法是在哪一步调整新 ViewController 的大小?

4

1 回答 1

4

我认为这个问题本质上与 UIPageViewController 的性质有关。它是从 UIScrollView 构建的。我不完全知道为什么会出现奇怪的调整大小行为,但是当构成页面的视图控制器使用自动布局时,这种行为似乎特别明显。看起来,将页面视图控制器中的约束锁定到超级视图会使元素在转换后调整大小,因为超级视图本身在所述转换之后会调整大小。

这很糟糕,因为苹果基本上是在推动我们所有人采用自动布局。自动布局很棒,我建议大家从现在开始使用它,但是当你将它与 UIPageViewController 一起使用时,它真的很糟糕。他们真的应该要么废弃那个类,要么为开发人员构建一些更容易的东西,可以直接拖到故事板中的东西。

有几点需要考虑。

1.) 不要将任何内容锁定在“顶部布局指南”或“底部布局指南”上。还要确保在任何旨在拥抱屏幕两侧的视图上禁用“限制到边距”。

2.) 如果您在单个页面/内容视图控制器中使用标签,请确保将其绑定/约束到超级视图以外的其他内容。我想在 UIImageView 上放置一个标签,因此我将标签与图像视图的前边缘和上边缘对齐(仅使用 AutoLayout 约束),创建一个偏移量来为标签提供一些边距。

3.) 以下将是一个很好的教程。但是,它有点过时了。我下载了该项目并基本上对其进行了修改,以获得一个有效的 UIPageViewController 实现。这个项目的唯一问题是它不使用 AutoLayout。我目前正在写一篇博文,更清楚地讨论如何一起使用 UIPageViewController 和 Autolayout。

http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/

于 2014-10-13T22:03:48.363 回答