根据内容自动调整基于 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 示例项目来演示问题:

sample project

如有任何帮助,我们将不胜感激!

我使用此代码修复了问题,其中 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
}