我经常遇到单个NSTextView
中需要多个NSStackView
的情况。当然,Auto Layout对此不满意,因为这会使高度模糊(假设堆栈视图未设置为同等填充)。即使在添加约束来解决这些问题之后,macOS Interface Builder似乎也有一个错误,它在被问到时拒绝实际更新帧。
出于这个原因和其他原因,我正在尝试创建一个TextBox
类(子类NSView
)来封装NSTextView
(以及关联的滚动视图)并包含内在内容大小避免布局问题。内在内容大小将根据用户指定的最小和最大行数计算(无需滚动即可显示)。换句话说,最多只有一定数量的行,TextBox
会自行调整大小,以便不需要滚动。
这似乎需要intrinsicContentSize
,这取决于帧宽。
但是,intrinsicContentSize
文档states:
您提供的内在大小必须独立于内容框架,因为无法根据更改的高度动态地将更改的宽度传达给布局系统。
但是,自动布局指南states:
文本视图的内在内容大小取决于内容,是否启用了滚动以及应用于视图的其他约束。例如,启用滚动后,视图不具有内在内容大小。禁用滚动时,默认情况下,视图的内在内容大小是根据文本的大小计算的,不包含任何换行。例如,如果文本中没有返回值,则会计算将内容布局为单行文本所需的高度和宽度。如果添加约束以指定视图的宽度,则内在内容大小将定义显示给定宽度的文本所需的高度。
鉴于在文本视图中禁用滚动:
如果添加约束以指定视图的宽度,则内在内容大小定义显示给定宽度的文本所需的高度。
然后似乎有办法通过查看现有的约束来做我想做的事。
如何定义根据指定宽度计算高度的内在内容大小,如上面最后一句引用中所述?
解决方案应该产生“上下文”中描述的效果,并且在堆栈视图中使用时不会产生错误或警告。