强制更新子视图控制器的safeAreaInsets

Jef*_*eff 7 ios autolayout safearealayoutguide

我有一个rootViewController带有子视图控制器(fullScreenViewController)的子视图控制器,该视图不时显示的视图上方(但作为子视图)rootViewController,占据了整个屏幕。

rootViewController.addChildViewController( fullScreenViewController ) rootViewController.view.addSubview( fullScreenViewController.view )

这种“全屏演示”是通过约束更新而不是通过使用来完成的present()(这样做有充分的理由)。

当我第一次初始化fullScreenViewController并将其添加为的子视图控制器时rootViewController,然后更新约束以使其出现在屏幕上,safeAreaInsets都已正确设置。

但是,稍后,当我rootViewController实际执行present()模态VC,并且该VC已被dismiss()编辑时,safeAreaInsets上的fullScreenViewController不再正确,并且fullScreenViewController幻灯片中的内容会在状态栏的顶部向上滑动。

我怎样才能迫使safeAreaInsetsfullScreenViewController得到适当的重新计算,使他们在比赛rootViewController他们安装后做的方式?

根据文档,rootViewController应该在所有childViewControllers 上正确设置safeAreaInsets ,但事实并非如此。

安全区域插图正确

安全区域插图不正确

ama*_*our 6

safeAreaInsets在演示文稿更改安全区域后,我遇到了完全相同的问题,即子视图控制器没有正确刷新。

我发现问题是通过将子视图设为父视图的直接子视图来解决的,而之前它是子视图的子视图。我猜当子 VC 的视图是父视图的直接子视图时,UIKit 代码会更快乐。

如果您可以将视图层次结构重构为此配置(如果还不是这种情况),则可能会这样做。