gpt4 book ai didi

swift - NSOutlineView 中的 NSTextView 的 IntrinsicContentSize 设置错误的高度

转载 作者:行者123 更新时间:2023-11-30 11:54:52 34 4
gpt4 key购买 nike

我有一个outlineView,我在其中放置了编辑时调整大小的NSTextView(想想大纲应用程序)。我已经完成了大部分工作,但有些行为不一致。

在我的 NSOutlineView 上设置:

outlineView?.usesAutomaticRowHeights = true

对于我的单元格 View ,我将 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,但它没有添加任何内容)

当将 TextView 添加到大纲 View 时,每个 TextView 都会调用 intrinsicContentSize 两次。第一次返回的大小是正确的,但在第二次调用时,一些文本不必要地换行。下面显示了 4 个 TextView 的内在内容大小的两次传递的打印输出。列宽为 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

始终相同的字符串会导致相同的行为。例如。字符串“相关主题”从不换行,字符串“相关术语”始终换行。

当 View 呈现时,文本实际上并没有被换行,即使usedRect值暗示它会被换行。文本显示正确,但大纲 View 中的行 View 太高,因为它认为它有两行文本。

enter image description here

有什么指示我可能遗漏了什么吗? “ensureLayout”是否以某种方式引用它之前的计算,然后在将相同的字符串拟合到其最后计算的宽度时出现舍入问题?

最佳答案

好的,这里的关键是文本呈现正确,但 View 的大小错误。

我为 NSTextView 的布局管理器创建了一个延迟。 NSTextView 添加到 NSOutlineView 后,文本被设置了 3 次(这似乎效率非常低!)。仅在前两个文本布局之后才在 NSTextView 上调用内在内容大小。

从layoutManager中调用invalidateIntrinsicContentSize:didCompleteLayoutFor...修复了所有问题。

我仍然不明白这里发生了什么,以及为什么在呈现内容时所有这些方法都会被调用这么多次。我想这与自动布局的复杂性和相互排斥的事物有关。

我也不明白为什么在这个过程中只有一些计算不正确。

如果有人能对此有所启发,请在此发表评论!

关于swift - NSOutlineView 中的 NSTextView 的 IntrinsicContentSize 设置错误的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47927844/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com