我需要了解_UILayoutGuide
,就像它是什么,它做了什么以及为什么它在UIView
作为subview
的层次结构中出现,几乎总是frame = (0,0,0,0)
答案 0 :(得分:21)
这是一个私有Apple类,在启用自动布局时用于topLayoutGuide
和bottomLayoutGuide
。如果导航栏不透明,则其中一个“视图”将位于[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
的协议。
答案 2 :(得分:4)
UILayoutGuides
表示布局引擎中的矩形。它们不会显示在视图层次结构中,但可以用作NSLayoutConstraint
。
在iOS 9中,Apple提供了一种新的改进的控制负空间的方法,称为UILayoutGuide
。 UILayoutGuide
或布局指南是布局中的空矩形,可以应用约束来定义约束与其他UILayoutGuides
或UIViews
的关系。
UILayoutGuides
没有层次结构,它们不属于视图层次结构。它们归UIView所有,但不能拥有UIView
或其他UILayoutGuide
。 UILayoutGuides不包含CALayer
且它们不是UIResponder
。这意味着通过添加UILayoutGuide
不会向呈现阶段添加绘制开销,并且通过UIEvent
对UILayoutGuide
处理流程没有影响。
来源: