13

我需要知道_UILayoutGuide它是什么,它做了什么以及为什么它几乎总是出现在UIViewas a的层次结构中。subviewframe = (0,0,0,0)

4

3 回答 3

21

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

这样做的原因是您可以定义与UIView对象一起使用的布局约束。

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

[subview conformsToProtocol:@protocol(UILayoutSupport)]


在 iOS 9 上,有一个新的私有类 ,_UILayoutSpacer它不是 的后代UIView,但可以用来设置约束。该系统似乎在双重模式下工作,从 xibs 和情节提要加载的控制器仍然使用_UILayoutGuide.,而在代码中创建的控制器使用_UILayoutSpacer.

于 2013-10-23T08:59:18.080 回答
6

UILayoutGuide通常称为 -topLayoutGuide 和 -bottomLayoutGuide,它们并不是真正的约束,但它们是符合称为UILayoutSupport.

您可以在此处找到有关该协议的更多信息。该值通常为 0,但您应该非常注意询问它们的大小

于 2013-10-23T08:56:10.977 回答
4

UILayoutGuides

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

iOS 9

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

UILayoutGuides没有层次结构,它们不是视图层次结构的一部分。它们由 UIView 拥有,但不能拥有一个UIView或另一个UILayoutGuide. UILayoutGuides 不包含 aCALayer并且它们不是UIResponder. 这意味着通过添加 a 不会将绘图开销添加到渲染阶段,并且通过添加 a对处理过程UILayoutGuide没有影响。UIEventUILayoutGuide

资源:

于 2015-11-06T15:50:04.110 回答