如何在列调整大小后使用usesAutomaticRowHeights = true更新NSTableView的行高?

时间:2017-10-23 13:07:34

标签: macos autolayout nstableview

由于新的属性usesAutomaticRowHeights以及自动布局,我们可以使用自动行高的NSTableView。这很有效。

但是当用户调整列的大小时,计算的高度不再正确,并且在tableview单元格中会出现间隙。

在这种情况下,是否有一种经过验证的方法可以在列调整大小后更新行高度?

我已经尝试了updateConstraintsForSubtreeIfNeeded()updateConstraints()setNeedsDisplay()reloadData()等方法,但没有任何效果。

2 个答案:

答案 0 :(得分:1)

如果您在设计中使用NSTextField,请确保每个NSTextField的动态高度Desired Width设置为Automatic。此设置位于“大小检查器”中。

更改此项会导致自动重新计算tableview行高。

答案 1 :(得分:0)

对我有用的东西是在NSTableviewDelegate中包含tableViewColumnDidResize通知方法。在那里,您可以调用表视图的noteHeightOfRows方法。这是一个实现:

   //Recalculate when the screen moves
   func tableViewColumnDidResize(_ notification: Notification) {
     let allIndex = IndexSet(integersIn:0..<self.YOURTABLE.numberOfRows)
    YOURTABLE.noteHeightOfRows(withIndexesChanged: allIndex)
}

以下是文档的链接:tableViewColumnDidResizenoteHeightOfRows