我有一个UIPageViewController
(父母)管理多个UIViewControllers
(孩子)。子级VC仅具有1个UIImageView
,并具有以下约束:向左和向右0 px
,向的0 px
顶部布局指南,向的20px底部布局指南
当我在Forward
方向上更改页面时,它的行为正确。当我在Backward
方向上更改页面时,该UIImageView
似乎覆盖了过渡动画期间的整个空间(类似于在没有约束的情况下的外观),并且在完成过渡后,它会纠正其位置。
长话短说,当向后翻转页面时,动画过程中图像显得更大,然后更改为正确的大小。为什么会这样呢?
PS:我创建了样板“基于页面的应用程序”,但是没有发生
编辑:我的情节提要板嵌套了两个这样的VC:TabBarController -> UINavigationController -> UIPageViewController
。 PageVC托管的VC是动态添加到代码中的。
我已经尝试过为父母设置UIImageView约束,我注意到两件事:
有任何想法吗?
编辑:2
我的
NavigationController
托管了一个VC,该VC将推送 UIPageViewController
(也许这不是应该完成的方式?),所以我实际上并没有通过代码“添加” UIPageViewController。我通过代码添加它的孩子。这是一个党卫军而且,子级只是容器视图(而不是布局指南)中带有
UIViewController
约束的UIImageView
的0
,因此它覆盖了整个空间。 最佳答案
问题是UIPageViewController的框架,当我们从情节提要板实例化它时,视图框架等于屏幕框架(没有topLayoutGuide和bottomLayoutGuide),并且子视图控制器也采用相同的框架...
因此要解决,我们有两个解决方案:
第一个解决方案
将topLayoutGuide和bottomLayoutGuide约束添加到imageView,但是使用此解决方案,我们会遇到一些动画问题,因为仅在完全显示页面时才计算帧(您可以在此处找到更多详细信息:https://stackoverflow.com/a/29589531/2477632)
第二种解决方案
1-以不同的方式实例化MagazinePagesViewController:创建
具有UIViewController super class 的MagazinePagesViewController(和
不是UIPageViewController)
2-以编程方式添加pageViewController
let pageViewController = UIPageViewController(transitionStyle: UIPageViewControllerTransitionStyle.Scroll, navigationOrientation: UIPageViewControllerNavigationOrientation.Horizontal, options: nil)
pageViewController.view.frame = view.frame //add also some constraints if needed to support rotation
view.addSubview(pageViewController.view)
addChildViewController(pageViewController)
pageViewController.didMoveToParentViewController(self)
如果需要,我可以使用这两种解决方案上载示例代码。
希望能有所帮助
关于ios - UIPageViewController的子ViewController行为异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29977428/