Macos 如何在调整列大小后使用useSaumaticRowHeights=true更新NSTableView的行高?
由于macOS 10.13的新属性Macos 如何在调整列大小后使用useSaumaticRowHeights=true更新NSTableView的行高?,macos,autolayout,nstableview,Macos,Autolayout,Nstableview,由于macOS 10.13的新属性useAutomaticRowHeights以及自动布局,我们可以使用具有自动行高的NSTableView。这很有效 但是,当用户调整列的大小时,计算的高度不再正确,表格视图单元格中会出现间隙 在这种情况下,是否有经过验证的方法在调整列大小后更新行高 我已经尝试过类似于subtreeIfNeed()的updateConstraints(),updateConstraints(),setNeedsDisplay(),reloadData()等方法,但都不起作用 对
useAutomaticRowHeights
以及自动布局,我们可以使用具有自动行高的NSTableView。这很有效
但是,当用户调整列的大小时,计算的高度不再正确,表格视图单元格中会出现间隙
在这种情况下,是否有经过验证的方法在调整列大小后更新行高
我已经尝试过类似于subtreeIfNeed()的
updateConstraints()
,updateConstraints()
,setNeedsDisplay()
,reloadData()
等方法,但都不起作用 对我有效的方法是在NSTableviewDelegate中包含tableViewColumnDidResize
通知方法。在那里,您可以调用表视图的notehightofrows
方法。下面是一个实现:
//Recalculate when the screen moves
func tableViewColumnDidResize(_ notification: Notification) {
let allIndex = IndexSet(integersIn:0..<self.YOURTABLE.numberOfRows)
YOURTABLE.noteHeightOfRows(withIndexesChanged: allIndex)
}
//屏幕移动时重新计算
func tableViewColumnDidResize(uu通知:通知){
让allIndex=IndexSet(integersIn:0..如果在设计中使用NSTextField,请确保每个具有动态高度的NSTextField的所需宽度
设置设置为自动
。此设置位于尺寸检查器中
更改此选项会导致自动重新计算tableview行高。谢谢,但不幸的是,这在我的代码中不起作用。是否使用usesAutomaticRowHeights=true
?我已将行大小样式设置为“自动(自动布局)”通过Interface Builder。当你说它不工作时,你是说它没有被调用,还是被调用时它什么也不做?它被调用了,但行的高度保持不变。我所有的其他尝试也在同一个tableViewColumnDidResize委托中。你是否也实现了heightOfRow
委托?如果是,当您删除此委托时,您的代码是否仍然有效?是的,我还实现了HeightOfRow
,如果我删除此委托,它将不起作用。我在那里做的是创建和配置视图,并调用layoutSubtreeIfNeeded
。然后,我返回视图的高度。@Ely我可以在没有h的情况下使其工作八行
或tableViewColumnDidResize
,我遵循了[并确保布局约束、拥抱和压缩足够大]