UIPageViewController 结合安全区

Posted

技术标签:

【中文标题】UIPageViewController 结合安全区【英文标题】:UIPageViewController in combination with safe area 【发布时间】:2017-12-19 08:55:53 【问题描述】:

我无法让 UIPageViewController 像我期望的那样与 Safe Area 结合使用。

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

Here's a demo 使用 Xcode 提供的 Page-Based App-Template(修改后内容视图固定到安全区域)。它没有最好的 fps,但应该很清楚,例如滚动完成后月份名称会改变位置。

是否有人遇到过类似的问题并找到了正确解决此问题的方法?

谢谢

【问题讨论】:

我有同样的问题,但我没有找到任何解决方案。 这里也一样。无法解决这个.. 【参考方案1】:

我也遇到了这个。似乎(至少从 ios 13.5 开始)safeAreaLayoutGuide 直到 pageViewController(_:didFinishAnimating:previousViewControllers:transitionCompleted:) 之后才更新屏幕外页面。

我可以通过将以下内容添加到我的 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)
    

【讨论】:

以上是关于UIPageViewController 结合安全区的主要内容,如果未能解决你的问题,请参考以下文章

如何从属于 UIPageViewController 的 UIViewController 之一更改 UIPageViewController?

UIPageViewController - 不符合协议

UIPageViewController 方向只向前

UIPageViewController 和 UIScrollView

NavigationController 中的 UIPageViewController

如何删除 UIPageViewController 中的 previousViewControllers