【问题标题】:Custom topLayoutGuide length in container view controller容器视图控制器中的自定义 topLayoutGuide 长度
【发布时间】:2014-01-30 09:01:20
【问题描述】:

例如,我制作了一个类似于UINavigationController 的自定义容器视图控制器,但它的顶部有 2 个导航栏。

然后,在子视图控制器中我使用自动布局,我当然希望内容从第二个导航栏下方开始。

要自动实现这一点,我需要将顶部布局指南设置为两个导航栏组合的高度。

我假设我们可以直接覆盖 topLayoutGuide-property,但无论我做什么,topLayoutGuide 函数都不会在我的自定义容器视图控制器或子视图控制器中被调用。

所以这意味着topLayoutGuide 基本上是一个毫无价值的属性,只能与 Apple 自己的容器视图控制器一起使用?

请告诉我我错了!

【问题讨论】:

    标签: ios uiviewcontroller ios7 autolayout


    【解决方案1】:

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

    容器视图控制器中的视图控制器没有设置这个 财产的价值。相反,容器视图控制器约束 要指示的值:

    • 导航栏的底部(如果导航栏可见)
    • 状态栏的底部,如果只有状态栏可见
    • 视图控制器视图的顶部边缘,如果状态栏和导航栏都不可见

    这三个场景对我来说意味着它可能无法自定义,尽管我很想被证明是错误的。似乎是此功能的一个很好的用例。

    【讨论】:

    • 是的,奇怪的是在子类中重写只读属性是有意义的。运行时发生了一些可疑的事情,因为被覆盖的方法甚至从未被调用......
    • UIKit 类很少调用自己的访问器
    • 这里的根本问题是 topLayoutGuide 中有相当大的魔力。它不能仅通过实现 UILayoutSupport 来复制。在引擎盖下,这些是 UIView 的......这就是它们与 AutoLayout 一起工作的方式。在 iOS9 中,指南上有一些新方法很难在自定义子类中复制。
    猜你喜欢
    • 2013-10-09
    • 2011-05-15
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2013-02-01
    • 2012-04-19
    相关资源
    最近更新 更多