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

时间:2018-07-06 16:35:51

标签: ios autolayout safearealayoutguide

我有一个rootViewController,它有一个子视图控制器(fullScreenViewController),该视图的视图会不时显示在视图上方(但作为子视图) rootViewController中的图片,全屏显示。

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

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

当我首先初始化fullScreenViewController并将其添加为rootViewController的子视图控制器,然后更新约束使其在屏幕上时,safeAreaInsets均已正确设置。 / p>

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

如何强制重新计算fullScreenViewController上的safeAreaInsets,以使其与设置后的fullScreenViewController相匹配?

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

Safe Area Insets Correct

Safe Area Insets Incorrect

1 个答案:

答案 0 :(得分:3)

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

我发现,在子视图成为子视图的子视图之前,通过将孩子的视图作为父视图的直接子视图来解决该问题。我认为当子级VC的视图是父级的直接子视图时,UIKit代码会更快乐。

如果您可以将视图层次结构重构为这种配置(如果还没有,则可以这样做)。