使用自动布局,如何在 NSSplitView 中将子视图居中而不强制宽度 NSSplitView 为静态?

Posted

技术标签:

【中文标题】使用自动布局,如何在 NSSplitView 中将子视图居中而不强制宽度 NSSplitView 为静态?【英文标题】:Using autolayout, how can I center a subview in an NSSplitView without forcing the width NSSplitView to be static? 【发布时间】:2015-06-13 19:45:50 【问题描述】:

我有一个 NSSplitView,内容包含在两个 NSView 中。左边的 NSView 有 2 个约束——Equal WidthsEqual Heights。正确的 NSView 有一些简单的东西,比如说一个 NSTextField,它通过约束 Center X AlignmentCenter Y Alighment 居中。这就是我希望在调整窗口大小和/或 NSSplitView 分隔符时的样子:

这是正在发生的事情:

我尝试了很多配置更改,我尝试使用 NSSplitViewController 与只是将 NSSplitView 放入 NSViewController 以通过编程方式调整更多参数,但我没有任何运气。每当调整窗口大小时,左视图总是会占据多余的空间。分隔线也会发生同样的情况(它可以调整大小,但松开鼠标按钮会使其立即弹回)。似乎我在这里缺少一些基本的东西。

【问题讨论】:

【参考方案1】:

文本字段的内容拥抱优先级可能高于拆分视图项的持有优先级。解决这个问题,视图可能会按照您期望的方式工作。

此外,如果在调整视图大小时,左视图随窗口一起调整大小,而右视图保持相同大小,则表明左视图的保持优先级可能高于右视图。您应该让想要保持相同大小的一侧具有更高的持有优先级。

也就是说,我不确定您对子视图设置的约束是什么意思。 “左边的NSView 有两个约束——Equal WidthsEqual Heights。”你在这里是什么意思?它的宽度等于什么?它的高度等于什么?你的意思是它有纵横比限制吗?坦率地说,我想不出什么样的约束对于拆分视图中的视图有意义。

【讨论】:

感谢您的信息。稍后我会玩这个,看看我能想出什么。拆分视图中有 2 个自定义视图。左侧自定义视图具有等宽约束,其中第一项 = 滚动视图(滚动视图在左侧自定义视图内),关系 = 相等,第二项 = superview.width。右视图也一样。没有纵横比限制。

以上是关于使用自动布局,如何在 NSSplitView 中将子视图居中而不强制宽度 NSSplitView 为静态?的主要内容,如果未能解决你的问题,请参考以下文章

如何在具有自动布局的容器视图中将 UITableView 的大小设置为子视图

使用自动布局在 UITableViewCell 中将 UILabel 居中

使用自动布局在 UIScrollView 中将可变宽度的文本列居中

在 UITableView 标头中将标签约束设置为 0 时自动布局失败

如何在 CSS3 站点布局中将图像跨越多个列?

在水平堆栈视图(自动布局)中将文本与图像垂直居中 - iOS