什么是_UILayoutGuide?
我需要知道_UILayoutGuide
,就像它是什么,它是什么以及为什么它在UIView
的层次结构中作为subview
呈现,几乎总是frame = (0,0,0,0)
。
UILayoutGuide
通常被称为-topLayoutGuide和-bottomLayoutGuide,这些并不是真正的约束,但它们是符合称为UILayoutSupport
协议的视图元素。
你可以在这里find关于该协议的更多信息。 价值往往是0,但你应该支付很多关注,你问他们的大小 。
这是一个私人的Apple类,当自动布局被启用时,它被用于topLayoutGuide
和bottomLayoutGuide
。 如果导航栏不透明,则其中一个“视图”将位于[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中,苹果提供了一种新的控制负空间的改进方式,称为UILayoutGuide
。 UILayoutGuide
或布局指南是布局中的一个空矩形,可以应用约束来定义它与其他UILayoutGuides
或UILayoutGuides
的关系 。
UILayoutGuides
没有层次结构,它们不是视图层次结构的一部分。 他们拥有一个UIView,但他们不能拥有一个UIView
或另一个UILayoutGuide
。 UILayoutGuides不包含CALayer
,它们不是UIResponder
。 这意味着,通过添加UILayoutGuide
,不会在绘制阶段添加绘图开销,并且通过使用UILayoutGuide
不会影响UIEvent
处理过程。
资源:
- UILayoutGuide – 自动布局的隐形助手
- UILayoutGuide.h