什么是_UILayoutGuide?

时间:2013-10-23 08:46:20

标签: ios iphone uiview uiview-hierarchy

我需要了解_UILayoutGuide,就像它是什么,它做了什么以及为什么它在UIView作为subview的层次结构中出现,几乎总是frame = (0,0,0,0)

3 个答案:

答案 0 :(得分:21)

这是一个私有Apple类,在启用自动布局时用于topLayoutGuidebottomLayoutGuide。如果导航栏不透明,则其中一个“视图”将位于[0,0]中。如果您的导航栏是半透明的,则相同的view通常在纵向[0,64]中(状态栏为20pt,导航栏为44pt)。底部工具栏有一个类似的工具,如果你有一个。

以这种方式完成的原因是您可以定义布局约束,这些约束适用于UIView个对象。

有一点需要注意,如果您有一些适用于子视图的逻辑,请注意不要将它们包含在您的计算中。您可以通过测试忽略这些:

[subview conformsToProtocol:@protocol(UILayoutSupport)]


在iOS 9上,有一个新的私有类_UILayoutSpacer,它不是UIView的后代,但可用于设置约束。系统似乎在双模式下工作,其中从xib和storyboard加载的控制器仍使用_UILayoutGuide,而在代码中创建的控制器使用_UILayoutSpacer设置。

答案 1 :(得分:6)

UILayoutGuide通常被称为-topLayoutGuide和-bottomLayoutGuide,这些不是真正的约束,但它们是视图元素符合名为UILayoutSupport的协议。

您可以找到有关该协议here的更多信息。该值通常为0,但在您询问size时,您应该注意很多。

答案 2 :(得分:4)

UILayoutGuides

UILayoutGuides表示布局引擎中的矩形。它们不会显示在视图层次结构中,但可以用作NSLayoutConstraint

中的项目

iOS 9

在iOS 9中,Apple提供了一种新的改进的控制负空间的方法,称为UILayoutGuideUILayoutGuide或布局指南是布局中的空矩形,可以应用约束来定义约束与其他UILayoutGuidesUIViews 的关系。

UILayoutGuides没有层次结构,它们不属于视图层次结构。它们归UIView所有,但不能拥有UIView或其他UILayoutGuide。 UILayoutGuides不包含CALayer且它们不是UIResponder。这意味着通过添加UILayoutGuide不会向呈现阶段添加绘制开销,并且通过UIEventUILayoutGuide处理流程没有影响。

来源: