gpt4 book ai didi

objective-c - 两个动态调整大小 View 之间的自动布局约束

转载 作者:行者123 更新时间:2023-12-03 17:55:13 24 4
gpt4 key购买 nike

前提

我有一个 super View C,它只包含两个 subview A 和 B。ASCII 艺术:

+-----------+
| view A |
| view B |
+-----------+

这就是我想要的:

  • A 的顶部必须固定到 C 的顶部。 A 的高度没有固定在任何东西上;它实际上根据其内容而变化:它是一个无 ScrollView 的 NSTextView

  • B 的顶部距离 A 的底部必须始终为 10 像素。 B 的底部必须始终固定到 C 的底部。

整个 View C应该被A和B分割,A和B之间的分割必须由A当前的高度决定(由NSTextView决定),B应该填充剩余的部分A 未占用的空间。

换句话说:A 保持在顶部。 B 填写了 super View 的其余部分。随着 A 的增长,B 被向下推。

问题

Interface Builder 总是创建不可删除的约束,将 B 的顶部固定到 C 的顶部。这意味着 B 将始终位于特定的 Y 位置。如果我给 B 一个高度限制,这种情况就不会发生,但这不是我想要的。

Interface Builder

我尝试实现 super View 的updateConstraints来删除这个IB生成的约束。这种方法可行,但当我这样做时,B 的顶部从未调整过,而且似乎是任意设置的。无论我将约束优先级设置为多少,B 最终都会位于 C 的底部、顶部或远离屏幕的某个位置。而且,A 似乎会增长到填满整个 C。

这是我无法摆脱的自动创建的约束:

Interface Builder

其他详细信息

我应该补充一点,C 是基于 View 的 NSTableView 中的单元格 View 。我计算了在 tableView:heightOfRow 中适合 A 和 B 所需的高度,并期望约束能够布置所有内容。

最佳答案

对后人的回答:在约束条件下显然不可能拥有所描述的配置。到目前为止,我的解决方案有效:

  • 在 A 上创建一个设置特定高度的约束。 (在 IB 中,我设置了一个虚拟高度。)
  • 对 B 创建一个约束,以设置特定的顶部。
  • 不要指定 A 和 B 之间的垂直间距。(至少在我的例子中,这会在 NSTableView 中触发奇怪的行为。)
  • 在 Controller 或 View 代码中,计算 A 的高度并使用 constraint.constant 属性进行设置。
  • 另外,在 Controller 或 View 代码中,计算 B 的顶部(使用 A 的高度)并使用 constraint.constant 属性进行设置。

关于objective-c - 两个动态调整大小 View 之间的自动布局约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14666887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com