UIPageViewController与安全区域相结合

时间:2017-12-19 08:55:54

标签: ios uipageviewcontroller safearealayoutguide

我无法让UIPageViewController与Safe Area结合使用,正如我所期望的那样。

我正在做的是将UIPageViewControllers子视图控制器的子视图(例如childVc1)固定到安全区域(childVc1.view.safeAreaLayoutGuide)。 这工作正常,直到我将方向从纵向切换到横向,滑动到下一个子视图控制器,旋转回肖像并返回到上一个子视图控制器。然后,只有在滚动完成后才会更新上一个子视图控制器的视图,这看起来很奇怪。

Here's a demo使用Xcode提供的基于页面的应用程序模板(已修改,以便将内容视图固定到安全区域)。它没有最好的fps,但它应该很清楚,例如滚动完成后,月份名称会更改位置。

有人遇到类似的问题,并找到了如何正确解决这个问题的方法吗?

由于

1 个答案:

答案 0 :(得分:0)

我也碰到了这个。似乎(至少从iOS 13.5开始),除非在pageViewController(_:didFinishAnimating:previousViewControllers:transitionCompleted :)之后才对屏幕外页面的safeAreaLayoutGuide进行更新

我能够通过将以下内容添加到我的UIPageViewController子类中来解决此问题,它是通过“重置”可见的视图控制器来强制页面视图控制器旋转后删除屏幕外页面。

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
        
     coordinator.animate(alongsideTransition: nil) { (context) in
        self.setViewControllers(self.viewControllers, direction: .forward, animated: false, completion: nil)
    }
}