为什么将其他SafeAreaInsets传播到子VC?

时间:2018-09-24 15:22:54

标签: ios uikit safearealayoutguide

根据Apple的文档,没有任何证据,但是我发现additionalSafeAreaInsets已传播到childVC,但事实确实如此。

在iPhone 7模拟器上运行this gist时,将输出容器VC和子VC的底部安全区域插图均为88,这是因为我希望只有容器VC具有任何底部安全区域插入,而ChildVC的值为0(在iPhone X及更高版本上,仅为Home Indicator所需的数量)。

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

谢谢!

1 个答案:

答案 0 :(得分:1)

不是Apple Documentation的证据吗?

  

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