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

How to update row heights of NSTableView with usesAutomaticRowHeights = true after column resize?

自 macOS 10.13 以来,我们可以使用具有自动行高的 NSTableView,这要归功于新的 属性 usesAutomaticRowHeights,当然还有自动布局。这很好用。

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

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

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

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

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

这里是文档的链接:tableViewColumnDidResize and noteHeightOfRows

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

更改此设置会导致自动重新计算表格视图的行高。