前提
我有一个超级视图 C,它只包含两个子视图 A 和 B。ASCII 艺术:
+-----------+
| view A |
| view B |
+-----------+
这就是我想要的:
A 的顶部必须固定在 C 的顶部。A 的高度没有固定在任何东西上;它实际上根据其内容而变化:它是一个无滚动视图
NSTextView
。B 的顶部必须始终距离 A 的底部 10 个像素。B 的底部必须始终固定在 C 的底部。
整个视图 C 应该在 A 和 B 之间进行分割,并且 A 和 B 之间的分割必须由 A 的当前高度决定(由 决定NSTextView
),并且 B 应该填充 A 未占用的任何剩余空间。
换句话说:A 保持在顶部。B 填写了 superview 的其余部分。随着 A 的增长,B 被向下推。
问题
Interface Builder 总是创建不可删除的约束,将 B 的顶部固定到 C 的顶部。这意味着 B 将始终位于特定的 Y 位置。如果我给 B 一个高度限制,这不会发生,但这不是我想要的。
我已经尝试实现超级视图updateConstraints
来删除这个 IB 生成的约束。那种工作,但是当我这样做时,B的顶部从未调整过,似乎是任意设置的。不管我将约束优先级设置为什么,B 最终都位于 C 的底部、顶部或远离屏幕的某个位置。此外,A 似乎增长到填满整个 C。
这是我无法摆脱的自动创建的约束:
额外细节
我应该补充一点,C 是基于视图的单元格视图NSTableView
。我计算了适合 A 和 B 所需的高度tableView:heightOfRow
,并期望约束能够将所有内容都布置好。