1

There is no evidence of this according to Apple's documentation, but I have found that additionalSafeAreaInsets is propagated to childVCs, but it's clearly the case.

Running this gist on an iPhone 7 simulator will output that both the container VC and the child VC have a bottom safe area inset of 88, when I would expect that only the Container VC to have any, and instead the ChildVC would have 0 (and on iPhone X and newer, just the amount needed for the Home Indicator).

Is there any way of getting this behaviour?

Thanks!

Pierluigi Cifani
  • 224
  • 2
  • 14

1 Answers1

2

Isn't that the evidence from Apple Documentation?

UIKit container view controllers already adjust the safe area of their child view controllers to account for content views. For example, navigation controllers extend the safe area of their child view controllers to account for the navigation bar.

By the way, it's not a propagation. It's a more smart thing that makes a lot of sense. If you set for your ContainerViewController its safe area to 80 points from the bottom, and your ChildViewController overlaps X points of the area, UIKit automaticall set the safe area for this child view controller to X points, so none subviews could get out of your safe area.

For example, if you'll set you childVC constraints like that

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)
])

In the log you'll see, that ChildViewController safe area height is 50. This is exactly the height of overlap.

Yury Imashev
  • 2,068
  • 1
  • 18
  • 32
  • Thanks a lot for your answer Yury. Reading again the documentation it does look like your only supposed to set `additionalSafeAreaInsets` for your child VC instead of setting your `additionalSafeAreaInsets` as part of your layout code. Even the sample code is doing so for a childVC. – Pierluigi Cifani Sep 24 '18 at 17:12
  • @PierluigiCifani Yes, and `UIKit` will add that `Insets` to existing overlap. – Yury Imashev Sep 24 '18 at 17:31