动画自动调整 NSTableView 行高

Animate self-sizing NSTableView row height

我有一个使用自动调整 table 视图单元格的项目。我想在单元格的高度发生变化时制作动画。 NSTableView 的 noteHeightOfRows(withIndexesChanged:) 将为基于视图的单元格执行此操作,但仅当在委托的 tableView(_, heightOfRow:) 方法中明确提供高度时。当使用自动布局计算单元格高度时,该值将被忽略。

我可以使单元格视图本身具有动画效果,但它包含的行视图会跳转到约束规定的最终大小。还尝试在行视图上使用高度约束并为其设置动画,但它也被忽略了。有人离开开发 Mac 解决了这个问题的应用程序吗?

我创建了一个示例项目并将其放在 Github 上,它为 table 的行高设置动画。它不使用委托 tableView(_, heightOfRow:) 函数。看看吧。

必要的步骤:

  • 在 table 视图上设置行高以使用自动布局。
  • 在 table 视图上调用 beginUpdate()endUpdate() 的环绕动画。
  • 更改 NSTableCellView 中控件的属性并调用 noteHeightOfRows(withIndexesChanged:) 在 table 上调用 NSAnimationContext.runAnimationGroup

不过,如果你只看我放在 Github 上的代码,那就更容易了。