首页 > 解决方案 > 强制更新子视图控制器的 safeAreaInsets

问题描述

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

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

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

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

但是,稍后,当我rootViewController实际上做present()了一个模态 VC,并且那个 VC 被dismiss()编辑时,safeAreaInsets上面的fullScreenViewController不再正确,并且在fullScreenViewController状态栏顶部的幻灯片中的内容。

如何强制正确重新计算safeAreaInsetson fullScreenViewController,以便它们与rootViewController设置后的方式相匹配?

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

安全区域插图正确

安全区域插图不正确

标签: iosautolayoutsafearealayoutguide

解决方案


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

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

如果您可以将视图层次结构重构为此配置(如果还没有的话),这可能会做到。


推荐阅读