0

我在 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
    }
}

我还认为在列大小调整结束后重新加载大纲视图会解决问题,但这似乎不起作用。

提前致谢。

4

0 回答 0