【问题标题】:Xcode Auto Layout: Can't resize windowXcode 自动布局:无法调整窗口大小
【发布时间】:2013-07-24 10:30:20
【问题描述】:

我想要达到的目标:

Custom View 1
   aligned at the top
   fixed height = 20px
   width = window width

Horizontal Split View
   just below the custom view
   width = window width
   height = as large as possible

Custom View 2
   aligned at the bottom
   fixed height = 20px
   width = window width

这是一个非常简单的布局:窗口顶部和底部有一个页眉和一个页脚,中间有一个拆分视图,左侧和右侧的一些内容应随窗口调整大小。但是,Apple 设计的自动布局管理器非常糟糕,我似乎无法让它工作。 (我已经摸索了大约三个小时!)

问题是:一旦我给自定义视图一个固定的高度,窗口高度就会被锁定,我不能再垂直调整它的大小。我正在尝试通过以下限制来做到这一点:

Custom View 1
    Constraints
    height = 20px

Custom View 2
    height = 20px

Constraints
    Leading horiz space from Custom View 1 to Superview = 0
    Leading horiz space from Custom View 2 to Superview = 0
    Leading horiz space from Split View to Superview = 0
    Trailing horiz space from Custom View 1 to Superview = 0
    Trailing horiz space from Custom View 2 to Superview = 0
    Trailing horiz space from Split View to Superview = 0

    Top vert space between Custom View 1 and Superview = 0
    Vert space between Custom View 1 and Split View = 0
    Vert space between Custom View 2 and Split View = 0
    Bottom vert space between Custom View 2 and Superview = 0
    Top vert space between Custom View 2 and Superview = 344px (!)

最后一行是Xcode添加的,我删不掉。当然,这是负责固定垂直布局的。我怎样才能摆脱它???

【问题讨论】:

    标签: xcode constraints autolayout


    【解决方案1】:

    好的,我终于想通了。

    我不得不保留 IB 的冗余约束,但给它的优先级为 1。IB 给它的优先级为 1000,总是覆盖我的约束。

    【讨论】:

    • 另一种解决方案是在 XCode 中添加约束,但选中“占位符”框 - 这将在运行时将其删除,因此您的 xib 看起来不错,但约束不会已在您的应用中修复。
    【解决方案2】:

    每个视图都需要有足够的约束让布局系统计算位置(x 和 y)和大小(宽度和高度)。如果系统没有足够的信息来计算这些属性,则布局被认为是不明确。 Xcode 中的 Interface Builder 不会让您创建模棱两可的布局,因此它将添加约束以确保完全约束的布局。

    根据您的信息,似乎 subview2 受到了足够的限制。但是,我认为您可能没有将视图的高度设置为约束。您为视图设置的框架会被布局系统忽略。这会引入歧义。 尝试为 subview2 添加高度限制。

    【讨论】:

    • 好的,我向拆分视图添加了一个要求高度 >= 100 的约束。之后我能够删除自定义视图 2 和超级视图之间的冗余约束。但是,IB 自动向自定义视图 1(到超级视图底部的空间 = 344)添加了一个新约束,我无法删除它。窗口的高度仍然是固定的。
    • 不等式约束 (>= 100) 几乎不会自行解决歧义问题。拆分视图的顶部和底部边缘是否固定到子视图 1 和 2?
    • 另外,您在 subview1 和 subview2 上是否有高度约束?在尺寸检查器中设置其框架可能还不够。确保您已添加将高度固定为 20 点的约束。
    • 是的,他们是。我刚刚重新创建了这些。奇怪:如果我先选择自定义视图 1,然后按住 SHIFT 键单击拆分视图,我可以 Pin > Vertical Spacing 就可以了。但是,如果我先选择拆分视图,然后按住 SHIFT 键单击自定义视图 1,则用于固定的菜单项将显示为灰色。
    • 只是为了它:尝试将拆分视图的高度设置为 1000,并将优先级设置为 500。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 2014-04-29
    相关资源
    最近更新 更多