什么是_UILayoutGuide?

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

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

你可以在这里find关于该协议的更多信息。 价值往往是0,但你应该支付很多关注,你问他们的大小 。

这是一个私人的Apple类,当自动布局被启用时,它被用于topLayoutGuidebottomLayoutGuide 。 如果导航栏不透明,则其中一个“视图”将位于[0,0]中。 如果您的导航栏是半透明的,那么相同的view通常会以纵向显示[0,64](状态栏为20pt +导航栏为44pt)。 如果有的话,底部的工具栏也有类似的function。

这样做的原因是你可以定义布局约束,这与UIView对象一起工作。

有一件事要注意,如果你有一些逻辑在子视图上工作,注意不要将它们包含在你的计算中。 你可以通过testing来忽略这些:

[subview conformsToProtocol:@protocol(UILayoutSupport)]


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

UILayoutGuides

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

iOS 9

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

UILayoutGuides没有层次结构,它们不是视图层次结构的一部分。 他们拥有一个UIView,但他们不能拥有一个UIView或另一个UILayoutGuide 。 UILayoutGuides不包含CALayer ,它们不是UIResponder 。 这意味着,通过添加UILayoutGuide ,不会在绘制阶段添加绘图开销,并且通过使用UILayoutGuide不会影响UIEvent处理过程。

资源:

  • UILayoutGuide – 自动布局的隐形助手
  • UILayoutGuide.h