与父UIView容器的安全区域相比,如果创建相对于父UIView容器本身的约束,有什么区别?

问题描述

当前,我有一个UIView容器,其中包含其他子UIView

我尝试了两种创建约束的方法


相对于父级UIView容器本身

  1. trailing =主标签。trailing+ 10
  2. Main Label.leading =前导+ 10
  3. Main.Label.centerY = centerY

enter image description here


相对于父级UIView容器的安全区域

  1. 安全区域.trailing =主标签.trailing + 10
  2. 标签。前导=安全区域。前导+ 10
  3. Main.Label.centerY =安全区域.centerY

enter image description here


它们在Xcode XIB UI预览中看起来可能有所不同,在安全区域中似乎有最大的余量。

但是,当我运行该应用程序时,两者都会产生相同的UI外观。

我知道,与父UIView容器的安全区域相比,相对于父UIView容器本身创建约束时有什么区别?大多数时候我们应该走哪条路?

解决方法

SafeArea只是Apple提供的布局指南,可避免您的视线或任何组件覆盖一些不希望的地方,例如状态栏或底部栏。

通常,当我创建自定义UIView时,我总是将子视图与其父视图对齐。 (即,相对于父级UIView容器本身创建一个约束),因为我知道我的自定义UIView不管在哪里,即使它们靠近安全区域,也要看起来一样。

也许通过一些演示会更加清楚:

enter image description here

enter image description here

因此我创建了两个自定义视图,标签的标签均以超级视图和安全区域为中心。

enter image description here

当您运行应用程序时,它们看上去是相同的,但是当您将它们移至安全区域时...

enter image description here

我们可以看到以安全区域为中心的标签向下移动,安全区域布局指南正在工作。 (当然,我们可以获取状态栏的高度,并比较两个标签的位置,我们应该看到差异恰好是状态栏的高度,但是在这里我更希望以视觉方式进行解释。)

总而言之,在大多数情况下,我建议在创建自定义视图时创建相对于超级视图的约束,以免出现任何不良行为。