容器视图控制器中自定义顶部布局指南的长度

17
比如说,我做了一个自定义的容器视图控制器类似于UINavigationController,但是它有两个导航栏在顶部。
然后,在子视图控制器中,我使用自动布局,并且当然希望内容从第二个导航栏下面开始。
为了自动实现这一点,我需要将顶部布局指南设置为两个导航栏的高度之和。
我认为我们可以重写topLayoutGuide属性,但是无论我做什么,topLayoutGuide函数都不会在我的自定义容器视图控制器或子视图控制器中调用。
这意味着topLayoutGuide基本上是一个毫无价值的属性,仅与苹果自己的容器视图控制器一起使用?
请告诉我我错了!
1个回答

7
阅读文档后,topLayoutGuide 属性是只读的,其长度属性也是只读的。除此之外,文档中还指出:

容器视图控制器中的视图控制器不会设置此属性的值。相反,容器视图控制器会将该值约束为:

  • 如果存在导航栏,则为导航栏底部
  • 如果只存在状态栏,则为状态栏底部
  • 如果既不存在状态栏也不存在导航栏,则为视图控制器视图的顶部边缘
这三种情况似乎意味着它可能无法定制,尽管我很希望被证明是错误的。看起来这个功能很实用。

2
是的,奇怪的是,在子类中覆盖只读属性是有意义的。在运行时发生了一些可疑的事情,因为即使覆盖的方法从未被调用... - Accatyyc
UIKit类很少调用它们自己的访问器。 - Adlai Holler
1
这里的根本问题在于 topLayoutGuide 中存在相当多的魔法。仅仅实现 UILayoutSupport 是无法复制它的。在幕后,这些都是 UIView 的…… 这就是它们如何与 AutoLayout 一起工作的方式。在 iOS9 中,指南上有一些新方法,这些方法在自定义子类中极难复制。 - Adam Kaplan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接