5

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

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

这是使用 Xcode 提供的 Page-Based App-Template 的演示(已修改,以便将内容视图固定到安全区域)。它没有最好的 fps 但应该很清楚,例如在滚动完成后月份名称会改变位置。

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

谢谢

4

1 回答 1

0

我也遇到了这个。似乎(至少从 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)
    }
}
于 2020-07-16T07:35:15.530 回答