为什么附加安全区域插入会传播到子 VC?



根据Apple的文档,没有证据证明这一点,但我发现additionalSafeAreaInsets传播到childVC,但事实显然如此。

在 iPhone 7 模拟器上运行此要点将输出容器 VC 和子 VC 的底部安全区域内陷为 88,而我希望只有容器 VC 有,而不是子 VC 将有 0(在 iPhone X 及更高版本上,只有主页指示器所需的数量(。

有什么方法可以得到这种行为吗?

谢谢!

这不是来自苹果文档的证据吗?

UIKit 容器视图控制器已调整其子视图控制器的安全区域以考虑内容视图。例如,导航控制器扩展其子视图控制器的安全区域以考虑导航栏。

顺便说一句,这不是传播。这是一件更聪明的事情,很有意义。如果将ContainerViewController的安全区域设置为从底部开始80 points,并且ChildViewController与该区域的X点重叠,则UIKit自动将此子视图控制器的安全区域设置为X个点,以便任何子视图都无法离开您的安全区域。

例如,如果要设置这样的约束childVC

NSLayoutConstraint.activate([
childVC.view.heightAnchor.constraint(equalToConstant: childVCHeight),
childVC.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
childVC.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
// move childVC 30 points to the top
childVC.view.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -30)
])

在日志中,您将看到ChildViewController安全区域高度为 50。这正是重叠的高度。

最新更新