2014-01-30 88 views
16

说定制topLayoutGuide长度例如,我已类似于UINavigationController定制容器视图控制器,但它具有在顶部2个导航栏。在容器视图控制器

然后,在子视图控制器我使用自动版式,我当然要内容,以此开始第二导航栏下面。

要自动实现这一目标,我需要到顶部布局引导设置为两种导航栏相结合的高度。

我认为我们可以重写topLayoutGuide属性,但无论我做什么,topLayoutGuide函数都不会在我的自定义容器视图控制器或子视图控制器中调用。

因此,这意味着topLayoutGuide基本上是一个不值钱的财产,与苹果自己的容器视图控制器唯一的工作?

请告诉我,我错了!

回答

6

通过阅读文档,topLayoutGuide属性是(readonly),它的长度属性也是(readonly)。除此之外,它指出:

容器视图控制器内的视图控制器不设置这个 属性的值。取而代之的是,容器视图控制器约束 的值,以指示:

  • 导航栏的底部,如果导航栏是可见
  • 状态栏的底部,如果只有一个状态栏可见
  • 视图控制器的视图的顶部边缘,如果没有一个状态栏,也没有导航栏是可见

这三个场景中暗示,我认为它可能不是定制的,虽然我很想被证明是错误的。看起来就像这个功能的一个很好的用例。

+2

是的,奇怪的是,它是有道理的,虽然覆盖子类中的只读属性。一些可怕的事情发生在运行时间,因为重写的方法甚至不会被调用...... – Accatyyc

+0

UIKit类很少调用它们自己的访问器 –

+1

这里的底层问题是topLayoutGuide中存在相当大的魔力。它不能通过实施UILayoutSupport来复制。这些都是UIView的...这就是他们如何使用AutoLayout。在iOS9中,指南上有新的方法,在自定义子类中复制将非常困难。 –

相关问题