我有一个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约束的UIImageView0,因此它覆盖了整个空间。

    最佳答案

    问题是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/

    10-14 21:29