NSOutlineView 不调整 NSScrollView 文档视图大小

NSOutlineView doesn't adjust NSScrollView document view size

我有一个 NSOutlineView,我以编程方式将其添加到 NSScrollView 中:

outlineView = ECOutlineView()
outlineView.translatesAutoresizingMaskIntoConstraints = false
scrollView.documentView = outlineView

滚动视图被限制在它所在的 window 范围内。一切都按预期运行,除了滚动视图不会对 outlineView 长度的变化做出反应。

例如,如果扩展一行,延长大纲视图,则滚动视图不会调整以允许滚动到新内容。

某些滚动同步确实有效。如果我向下滚动到大纲的末尾并开始删除行,则滚动 position 会更新,以便新的底部行与滚动视图的底部对齐,但是滚动范围仍然不正确。

如果我稍微调整 window 的大小,scrollView 将更新并提供正确的滚动范围。

看来约束是正确的,我只需要强制更新 - 但这不应该自动发生吗?

您不应将滚动视图的文档视图的 translatesAutoresizingMaskIntoConstraints 设置为 false。通常,容器视图负责控制它所管理的视图的 属性,因为只有它知道它是如何管理位置的。而且,您应该将其保留为默认值,以防您使用的容器视图不知道自动布局。

"container view",我指的是 class,它专门用于管理其他视图的位置。我不只是指任何可能有子视图的视图。

对于封闭的滚动视图,如果您只是将其放在普通视图或您自己的视图 class 中,并且您正在使用自动布局来控制其位置,那么您仍然会需要将 translatesAutoresizingMaskIntoConstraints 设置为 false。