【发布时间】:2020-07-31 01:19:56
【问题描述】:
我正在构建一个简单的 NSGridView,并希望将自定义 NSView 作为网格的每个元素。最终,每个 NSView 都将是一个以 NSView 为中心的基于 xib 的标签 (NSTextField)。 我遇到的问题是 NSView 的内在大小。我想定义 NSView 的大小并在此基础上进行自动布局工作。我将此代码添加到自定义视图(labelView):
override var intrinsicContentSize: NSSize {
return NSSize(width:100, height:100);
};
它确实被称为;但显然被忽略了。作为测试,我在同一行上有一些其他标签,并且该行的高度始终设置为最大的行文本高度(包括自定义视图中的标签);但长度设置为最长的列文本字段,忽略自定义视图中的标签。无论如何,我想任意使 NSView 具有一定的高度和长度,就像我尝试(但失败)使用intrinsicContentSize 一样。
NSStackview 似乎做对了;但 NSGridView 没有。
我可以用
强制特定列的宽度 grid.column(at:0).width = 400;
但我真正想做的是定义 NSView 的大小,并让自动布局将其用作构建块。
这让我觉得这是一个概念错误,所以如果有人能解释这些 NSGridView-autolayout-NSView 的细微之处,我想很多人可能会受益。
【问题讨论】:
-
你是新来的 swift.. 你不需要
;,你试过grid.invalidateIntrinsicContentSize吗? -
我做了,但我可能没有正确使用它。我发现在intrinsicContentSize中尊重宽度,而不是高度;并且 label.heightAnchor 受到尊重,但 label.widthAnchor:
-
override var intrinsicContentSize: NSSize{ invalidateIntrinsicContentSize() return NSSize(width:390,height: 200) // 200 can be anything, no change }; mainLabel.widthAnchor.constraint(equalToConstant: 430.0).isActive = true // does nothing -
刚刚再次阅读了有关网格视图的信息,可能会将您引向错误的方向。您实际上是否明确定义了 NSGridRow 高度和 NSGridColumn 宽度,它定义了 UIView 嵌套的单元格大小?还是您想坚持可以像在 iOS 上一样拥有 CollectionView 的想法?
-
什么是网格视图的
yPlacement?
标签: swift macos nsview nsgridview