标题应为:根据nstablecellview的nstextfield内容内在内容大小,自动调整基于视图的nstableview的包含nswindow的宽度。
有点像this other question,我想实现一个自动完成nswindow,其中包含一个nstableview,它可以调整为nstablecellview中的nstextfield实现的可用自动完成的长度的宽度。每个自动完成显然应该显示在一行…
上一个问题已经回答,但只与nstableview的高度有关。我想知道如何对宽度做同样的处理。我想用auto-layout尽可能多地实现这个解决方案。
我尝试将水平的“内容拥抱优先级”和“内容压缩抵抗优先级”设置为每个参与NSWDIONW最终显示的视图元素的最大值为1000。我在想,nstextfield的内在内容大小会迫使所有其他元素进行调整,但它不起作用。
由于nsscrollview的nsclipview没有被此宽度修改,因此设置nstablecolumn宽度也不起作用:nsscrollview调整并创建水平滚动条以覆盖整个“文档”。
下面是一个指向示例项目的链接,以演示该问题:
sample project
任何帮助都将不胜感激!

最佳答案

我使用以下代码修复了这个问题:ScrollViewWidthConstraint是NSScrollView Width约束的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
}

关于swift - 根据内容自动调整基于 View 的NSTableView的宽度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35657740/

10-10 22:22