ios - 强制更新子视图控制器的 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
状态栏顶部的幻灯片中的内容。
如何强制正确重新计算safeAreaInsets
on fullScreenViewController
,以便它们与rootViewController
设置后的方式相匹配?
根据文档,rootViewController
应该在其所有childViewController
s 上正确设置 safeAreaInsets,但似乎并非如此。
解决方案
safeAreaInsets
在演示文稿更改安全区域后,子视图控制器没有正确刷新,我遇到了完全相同的问题。
我发现通过使子视图成为父视图的直接子视图来解决问题,而之前它是子视图的子视图。我猜当子 VC 的视图是父级的直接子视图时,UIKit 代码会更快乐。
如果您可以将视图层次结构重构为此配置(如果还没有的话),这可能会做到。
推荐阅读
- sql - 在 SQL Server 中使用表变量
- mysql - SQL:从 2 列中过滤具有 2 个匹配条件的数据
- xamarin.ios - Xamarin 应用程序不会发布到苹果商店 - 多个 ERROR ITMS-90045 错误
- c - C中的字符串比较(游戏项目)
- c# - C#如何将richtextbox文本设置为默认值?
- bash - Bash脚本用文件名中的点替换所有连字符
- c++ - 使用静态大小的数组进行堆栈保护的预期行为是什么?
- python - 字典键和值 Python 的笛卡尔积
- python - 文本替换在特殊情况下不起作用
- google-apps-script - Google Apps 脚本 - setValue() 突然停止工作