【发布时间】:2017-12-21 15:15:59
【问题描述】:
我有一个大纲视图,我将 NSTextViews 放入其中,在编辑时调整大小(想想大纲应用程序)。我有大部分工作,但有些行为不一致。
在我设置的 NSOutlineView 上:
outlineView?.usesAutomaticRowHeights = true
对于我的单元格视图,我将 NSTextView 子类化。我设置了以下自动布局位:
self.translatesAutoresizingMaskIntoConstraints = false
setContentHuggingPriority(NSLayoutConstraint.Priority.defaultHigh, for: NSLayoutConstraint.Orientation.vertical)
我覆盖了 NSTextView 上的内在内容大小计算:
override var intrinsicContentSize: NSSize {
guard let manager = textContainer?.layoutManager else {
return .zero
}
print("\(manager.usedRect(for: textContainer!).size) \(string)")
return manager.usedRect(for: textContainer!).size
}
(我在上面代码中的 layoutManager 上调用了 ensureLayout,但它没有添加任何内容)
intrinsicContentSize 在添加到大纲时,每个文本视图都会调用两次。第一次返回的大小是正确的,但在第二次调用时,一些文本不必要地换行。下面显示了 4 个文本视图的内在内容大小的两次传递的打印输出。列宽是 281,所以这些字符串都不应该换行。第一遍它们都适合一条线(14 高),在第二遍时,最后两个字符串会换行,这很奇怪,因为它们不是最长的字符串:
(178.744140625, 14.0) New pointwddwek kelekwelek...
(100.720703125, 14.0) Related Subjects
(119.400390625, 14.0) Related Publications
(87.150390625, 14.0) Related Terms
(178.744140625, 14.0) New pointwddwek kelekwelek...
(100.720703125, 14.0) Related Subjects
(74.705078125, 28.0) Related Publications
(54.484375, 28.0) Related Terms
始终是相同的字符串导致相同的行为。例如。字符串“Related Subjects”从不换行,字符串“Related Terms”总是换行。
当显示视图时,文本实际上并没有被包裹,即使 usedRect 值暗示它会被包裹。文本显示正确,但大纲视图中的行视图太高,因为它认为它有两行文本。
我可能遗漏了什么的任何指针? 'ensureLayout' 是否以某种方式引用它之前的计算,然后在将相同的字符串拟合到其最后计算的宽度时出现舍入问题?
【问题讨论】:
标签: swift cocoa autolayout nsoutlineview