根据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。这正是重叠的高度。