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

9
我有一个rootViewController,其中包含一个子视图控制器(fullScreenViewController),其视图不时地显示在rootViewController的视图之上(但作为子视图),占据整个屏幕。
例如: rootViewController.addChildViewController(fullScreenViewController) rootViewController.view.addSubview(fullScreenViewController.view) 此"全屏呈现"是通过约束更新实现的,而不是使用present() (这样做有很好的理由)。
当我首次初始化fullScreenViewController并将其添加为rootViewController的子视图控制器,然后更新约束以使其显示在屏幕上时,safeAreaInsets都被正确设置。
然而,当我的rootViewController稍后实际上执行present()一个模态VC,并且该VC被dismiss()时,在fullScreenViewController上的safeAreaInsets不再正确,fullScreenViewController中的内容会滑动到状态栏之上。如何强制重新计算fullScreenViewController上的safeAreaInsets,使其正确匹配rootViewController,就像在设置后一样?根据文档,rootViewController应该正确设置其所有childViewController的安全区域,但实际情况并非如此。

Safe Area Insets Correct

Safe Area Insets Incorrect


我遇到了完全相同的问题,将模态视图显示在容器视图控制器上会破坏子视图的安全区域插图。你能找到原因或解决方法吗? - amadour
1个回答

5
我曾经遇到过一个类似的问题,即子视图控制器的 safeAreaInsets 在安全区域发生变化后没有被正确地刷新。我发现将子视图直接作为父视图的子视图可以解决这个问题,而不是作为子视图的子视图。我猜UIKit代码更喜欢子VC的视图直接作为父视图的子视图。如果您可以重构您的视图层次结构以符合这种配置(如果尚未满足),那么这可能会解决问题。

我最终重构了大部分的视图层次结构,其中某些东西为我解决了问题。我需要尝试一下你的解决方案,看看是否是我遇到的特定问题。虽然看起来很有希望,但很高兴你已经解决了它! - Jeff
在我的情况下不起作用。 - Alexander Algashev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接