如何在调整列大小后使用 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
。此设置位于尺寸检查器中。
更改此设置会导致自动重新计算表格视图的行高。
自 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
。此设置位于尺寸检查器中。
更改此设置会导致自动重新计算表格视图的行高。