Ich habe eine outlineView, in der ich NSTextViews setze, die bei der Bearbeitung die Größe ändern (Think Outliner App). Ich habe das meiste davon funktioniert, aber etwas Verhalten ist inkonsistent.NSTextView in NSOutlineView mit IntrinsicContentSize Einstellung falscher Höhe
Auf meinem NSOutlineView I gesetzt:
outlineView?.usesAutomaticRowHeights = true
Für meine Zelle-Ansichten, die ich NSTextView Unterklasse. Ich habe folgende Auto Layout Bits:
self.translatesAutoresizingMaskIntoConstraints = false
setContentHuggingPriority(NSLayoutConstraint.Priority.defaultHigh, for: NSLayoutConstraint.Orientation.vertical)
Und ich den inneren Gehalt Größenberechnung auf der NSTextView außer Kraft setzen:
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
}
(Ich war in dem obigen Code ensureLayout auf dem Layoutmanager aufrufen, aber es fügt nichts)
intrinsicContentSize wird zweimal pro Textansicht aufgerufen, wenn sie dem Outliner hinzugefügt werden. Das erste Mal, dass die zurückgegebene Größe korrekt ist, aber beim zweiten Aufruf wird ein Teil des Texts unnötigerweise umbrochen. Ein Ausdruck der zwei Durchläufe auf intrinsicContentSize für 4 Textansichten ist unten gezeigt. Die Spaltenbreite beträgt 281, daher sollte keine dieser Zeichenfolgen umbrochen werden. Der erste Durchlauf sie alle auf eine Zeile passen (14 hoch), im zweiten Durchgang, die letzten beiden Saiten wickeln, was seltsam ist, weil sie nicht die längsten Saiten sind:
(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
Es ist durchweg die gleichen Strings, resultieren in demselben Verhalten. Z.B. Die Zeichenfolge "Related Subjects" wird nie umbrochen, die Zeichenfolge "Related Terms" wird immer umbrochen.
Wenn die Ansichten dargestellt werden, wird der Text NICHT tatsächlich umbrochen, auch wenn der usedRect-Wert dies impliziert. Der Text wird korrekt angezeigt, aber die Zeilenansicht im Outliner ist zu hoch, da er zwei Textzeilen enthält.
Alle Hinweise, wo ich etwas fehlen könnte? Bezieht sich "useLayout" irgendwie auf seine vorherige Berechnung und hat dann Rundungsprobleme, wenn dieselbe Zeichenfolge in ihre zuletzt berechnete Breite passt?