我有一个带有 subview Controller (rootViewController
)的fullScreenViewController
,其 View 有时会显示在rootViewController
的 View 上方(但作为 subview ),占据了全屏。
IE。rootViewController.addChildViewController( fullScreenViewController )
rootViewController.view.addSubview( fullScreenViewController.view )
这种“全屏演示”是通过约束更新来完成的,而不是通过使用present()
来完成的(这是有充分理由的)。
当我首先初始化fullScreenViewController
并将其添加为rootViewController
的 subview Controller 时,然后更新约束使其在屏幕上显示时,safeAreaInsets
都已正确设置。
但是,稍后,当我的rootViewController
实际上将present()
用作模式VC,并且该VC已被dismiss()
编码时,safeAreaInsets
上的fullScreenViewController
不再正确,并且fullScreenViewController
中的内容会在状态栏顶部滑动。
如何强制正确重新计算safeAreaInsets
上的fullScreenViewController
,以使其与rootViewController
匹配,使其与设置后的方式相同?
根据文档,rootViewController
应该在所有childViewController
上正确设置safeAreaInsets,但是事实并非如此。
最佳答案
演示文稿更改了安全区域后, subview Controller 的safeAreaInsets
没有正确刷新,我遇到了完全相同的问题。
我发现,通过在 subview 的 subview 之前将 child 的 View 作为父 View 的直接 subview ,可以解决此问题。我猜想当子级VC的 View 是父级的直接 subview 时,UIKit代码会更快乐。
如果可以将 View 层次结构重构为该配置(如果不是这样的话),则可以这样做。
关于ios - 强制更新 subview Controller 的safeAreaInsets,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51214544/