我在 NSOutlineView 中有一个列,其中 NSTextFields 由 DateFormatter 格式化。
当列变得更宽或更窄时,我希望格式化程序样式能够实时更新。我认为响应列大小调整的最佳位置是在 NSTextField viewWillDraw() 中。当列调整大小时,它可以很好地工作。不幸的是,它只适用于可见的文本字段。当您滚动表格视图时,那些看不见的文本字段永远不会改变。
这是我到目前为止所拥有的。
override func viewWillDraw() {
super.viewWillDraw()
guard let formatter = formatter as? DateFormatter else { return }
switch self.visibleRect.width {
case 0.0..<DateTextField.shortFormatWidth:
formatter.dateStyle = .none
formatter.timeStyle = .short
case DateTextField.shortFormatWidth..<DateTextField.mediumFormatWidth:
formatter.dateStyle = .short
formatter.timeStyle = .short
case DateTextField.mediumFormatWidth..<DateTextField.longFormatWidth:
formatter.dateStyle = .medium
formatter.timeStyle = .short
default:
formatter.dateStyle = .long
formatter.timeStyle = .short
}
}
我还认为在列大小调整结束后重新加载大纲视图会解决问题,但这似乎不起作用。
提前致谢。