根据内容自动调整基于 NSTableView 的视图的宽度
Automatically adjust width of a view based NSTableView based on content
标题应为:根据 NSTableCellView 的 NSTextField 内容固有内容大小自动调整基于 NSTableView 的视图的包含 NSWindow 的宽度。
有点像this other question,我想实现一个自动完成NSWindow,里面有一个NSTableView,它可以调整到可用自动完成的长度的宽度,在NSTableCellView 中实现为NSTextField。每个自动完成显然应该显示在一行上...
前面的问题已经回答了,只是NSTableView的high问题。我想知道如何为宽度做 "same"。我想使用自动布局尽可能多地实施解决方案。
对于参与 NSWindow 最终显示的每个视图元素,我尝试将水平 "Content Hugging Priority" 和 "Content Compression Resistance Priority" 设置为最大值 1000。我在想 NSTextField 的固有内容大小会迫使所有其他元素进行调整,但它不起作用。
设置 NSTableColumn 宽度也不起作用,因为 NSScrollView 的 NSClipView 未被此宽度修改:NSScrollView 调整并创建水平滚动条以覆盖整个 "document"。
这里有一个 link 示例项目来演示问题:
如有任何帮助,我们将不胜感激!
我使用此代码修复了问题,其中 scrollViewWidthConstraint 是 NSScrollView 宽度约束的 IBOutlet,localTableView 是 NSTableView 的 IBOutlet,tableColumn 是 NSTableColumn 的 IBOutlet(在我的情况下是唯一的)。
注意:GitHub 上的链接项目已更新。
override func viewDidLoad() {
super.viewDidLoad()
self.updateTable()
}
func updateTable() {
localTableView.reloadData()
var computedWidth: CGFloat = 0
for var row = 0; row < 10; row++ {
let tableCellView = self.tableView(localTableView, viewForTableColumn: tableColumn, row: row) as! NSTableCellView
computedWidth = max(computedWidth, tableCellView.textField!.intrinsicContentSize.width)
}
scrollViewWidthConstraint!.constant = computedWidth
scrollView.needsUpdateConstraints = true
}
标题应为:根据 NSTableCellView 的 NSTextField 内容固有内容大小自动调整基于 NSTableView 的视图的包含 NSWindow 的宽度。
有点像this other question,我想实现一个自动完成NSWindow,里面有一个NSTableView,它可以调整到可用自动完成的长度的宽度,在NSTableCellView 中实现为NSTextField。每个自动完成显然应该显示在一行上...
前面的问题已经回答了,只是NSTableView的high问题。我想知道如何为宽度做 "same"。我想使用自动布局尽可能多地实施解决方案。
对于参与 NSWindow 最终显示的每个视图元素,我尝试将水平 "Content Hugging Priority" 和 "Content Compression Resistance Priority" 设置为最大值 1000。我在想 NSTextField 的固有内容大小会迫使所有其他元素进行调整,但它不起作用。
设置 NSTableColumn 宽度也不起作用,因为 NSScrollView 的 NSClipView 未被此宽度修改:NSScrollView 调整并创建水平滚动条以覆盖整个 "document"。
这里有一个 link 示例项目来演示问题:
如有任何帮助,我们将不胜感激!
我使用此代码修复了问题,其中 scrollViewWidthConstraint 是 NSScrollView 宽度约束的 IBOutlet,localTableView 是 NSTableView 的 IBOutlet,tableColumn 是 NSTableColumn 的 IBOutlet(在我的情况下是唯一的)。
注意:GitHub 上的链接项目已更新。
override func viewDidLoad() {
super.viewDidLoad()
self.updateTable()
}
func updateTable() {
localTableView.reloadData()
var computedWidth: CGFloat = 0
for var row = 0; row < 10; row++ {
let tableCellView = self.tableView(localTableView, viewForTableColumn: tableColumn, row: row) as! NSTableCellView
computedWidth = max(computedWidth, tableCellView.textField!.intrinsicContentSize.width)
}
scrollViewWidthConstraint!.constant = computedWidth
scrollView.needsUpdateConstraints = true
}