私はアウトラインビューを編集したときにサイズ変更されるNSTextViewsを配置しています。私はこの作業のほとんどを持っていますが、いくつかの動作には一貫性がありません。私NSOutlineViewでIntrinsicContentSizeが正しくない高さに設定されたNSOutlineViewのNSTextView
私が設定:私はNSTextViewをサブクラス私の細胞ビューの場合
outlineView?.usesAutomaticRowHeights = true
を。
self.translatesAutoresizingMaskIntoConstraints = false
setContentHuggingPriority(NSLayoutConstraint.Priority.defaultHigh, for: NSLayoutConstraint.Orientation.vertical)
そして私はNSTextViewに固有のコンテンツサイズの計算上書き:私は、次の自動レイアウトビットを設定(私は上記のコードでのlayoutManagerにensureLayoutを呼んでいたが、それは何も加えない
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
}
を)
intrinsicContentSizeは、アウトライナーに追加されるときにテキストビューごとに2回呼び出されます。最初に返されるサイズは正しいですが、2回目の呼び出しでテキストの一部が不必要に折り返されます。 4つのテキストビューに対するintrinsicContentSizeの2回のパスの出力を以下に示します。列の幅は281なので、これらの文字列のいずれも折り返す必要はありません。彼らはすべて1行(14高い)に収まる最初のパスは、2回目のパスで、最後の2つの文字列が、彼らが最も長い文字列ではないので、奇妙である、ラップ:
(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の値が意味するものであっても、テキストは実際にはラップされません。テキストは正しく表示されますが、アウトライナの行ビューは2行のテキストがあると考えられるので高すぎます。
私は何かが足りない可能性があります任意のポインタ? 'ensureLayout'は何らかの形で前回の計算を参照していますが、最後に計算した幅に同じ文字列をフィッティングするときに丸めの問題がありますか?