UIKit安全区域继承:

它真的有效吗?

在2018年的WWDC演讲中,David Duncan指出了适用于各种尺寸和形状的UIKIT应用 ,子视图继承了父视图的安全区域。 因此,当您获得子视图的安全区域插图或其安全区域布局指南时,将看到与父视图的安全区域重叠的安全区域。

还是会吗?

例1

当我创建一个父视图时,然后添加一个带有内部视图的容器视图,这两个视图都有自己的视图控制器,继承就起作用了。

包含的UIView与预期一样,从父视图控制器继承了安全区域,同样,布局指南也是正确的。

这里是链接:

misbell / SafeAreaInheritanceWorks
通过在GitHub上创建一个帐户来促进misbell / SafeAreaInheritanceWorks开发。 github.com

例子2

创建父视图时,然后直接在父视图上添加一个子视图,然后在子视图的顶部添加内部带有视图的容器视图,该子视图不会继承安全区域,所包含的视图也不会继承(此处未显示,但未显示。)

子视图的安全区域显然不是从父视图继承的。

难道我做错了什么? 还是按预期工作,我不明白为什么?

这是链接。

misbell / SafeAreaInheritanceNOTWorks
通过在GitHub上创建一个帐户来促进misbell / SafeAreaInheritanceNOTWorks开发。 github.com

后来:..

我尝试在根视图和包含的视图上都添加动态子视图。

动态添加到根视图的子视图仍未收到传播的安全区域值。

动态添加到所包含视图的子视图确实收到传播的安全区域值。

我猜测何时以及如何传播安全区域值存在问题。

这是动态创建代码的链接:

misbell / SafeAreaInheritanceDynamic
通过在GitHub上创建一个帐户来促进misbell / SafeAreaInheritanceDynamic开发。 github.com

思想

因此,如果我在争论这个问题,我会说,看,伙计,没有必要将saef区域插图传播到根视图上的子视图,这些视图没有被嵌入并且没有自己的视图视图控制器,只是普通的旧子视图。 根据定义,您位于根视图控制器中,您知道安全区域在哪里,并且可以对其进行调整,无论是在Storyboard中还是在代码中动态进行调整。

鉴于如果您的嵌入式视图带有其自己的视图控制器,则需要访问父视图的安全区域,而将它们获取给您的唯一方法是通过传播-很好,这很有意义。

令我震惊的是DD在WWDC谈话中的评论,即子视图传播了安全区域插图。 暗示所有子视图都可以得到它们,并且不,不,它们不能,并非在所有情况下都可以。