为什么UIPageViewController在页面转换后调整其UIViewControllers视图的大小?

Gyt*_*tis 3

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

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

请注意,我为新创建的ViewController设置了[self.pageViewController.view setAutoresizesSubviews:NO]和自动调整掩码为None.

是否正在调整新ViewController的步骤?

The*_*son 5

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

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

有几点需要考虑.

1.)不要将任何东西锁定到"顶部布局指南"或"底部布局指南".还要确保在任何旨在拥抱屏幕两侧的视图上禁用"约束到边距".

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

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

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