我有一个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,但事实并非如此。
答案 0 :(得分:3)
在演示更改安全区域后,子视图控制器的safeAreaInsets
无法正确刷新,我遇到了完全相同的问题。
我发现,在子视图成为子视图的子视图之前,通过将孩子的视图作为父视图的直接子视图来解决该问题。我认为当子级VC的视图是父级的直接子视图时,UIKit代码会更快乐。
如果您可以将视图层次结构重构为这种配置(如果还没有,则可以这样做)。