问题描述
当前,我有一个父UIView
容器,其中包含其他子UIView
我尝试了两种创建约束的方法
相对于父级UIView容器本身
- trailing =主标签。trailing+ 10
- Main Label.leading =前导+ 10
- Main.Label.centerY = centerY
相对于父级UIView容器的安全区域
它们在Xcode XIB UI预览中看起来可能有所不同,在安全区域中似乎有最大的余量。
但是,当我运行该应用程序时,两者都会产生相同的UI外观。
我知道,与父UIView容器的安全区域相比,相对于父UIView容器本身创建约束时有什么区别?大多数时候我们应该走哪条路?
解决方法
SafeArea只是Apple提供的布局指南,可避免您的视线或任何组件覆盖一些不希望的地方,例如状态栏或底部栏。
通常,当我创建自定义UIView时,我总是将子视图与其父视图对齐。 (即,相对于父级UIView容器本身创建一个约束),因为我知道我的自定义UIView不管在哪里,即使它们靠近安全区域,也要看起来一样。
也许通过一些演示会更加清楚:
因此我创建了两个自定义视图,标签的标签均以超级视图和安全区域为中心。
当您运行应用程序时,它们看上去是相同的,但是当您将它们移至安全区域时...
我们可以看到以安全区域为中心的标签向下移动,安全区域布局指南正在工作。 (当然,我们可以获取状态栏的高度,并比较两个标签的位置,我们应该看到差异恰好是状态栏的高度,但是在这里我更希望以视觉方式进行解释。)
总而言之,在大多数情况下,我建议在创建自定义视图时创建相对于超级视图的约束,以免出现任何不良行为。