我正在尝试使用 NSScrollView,其中内容可能(垂直)比窗口小或高,在运行时动态变化。 (稍后这将是一个具有多个可以随机显示/隐藏的视图的堆栈视图。)当内容大于滚动视图时,一切都会按预期工作;但是当内容在垂直方向上小于滚动视图时,它们会显示在滚动视图的底部而不是我想要的顶部。尽管我已经添加了一个约束,将内容的顶部锚定(用于测试:只是嵌入 NSScrollView 中的固定高度 NSBox)到其超级视图的顶部。
一些测试表明,剪辑视图的高度跟随滚动视图的高度,并且其原点保持不变;所以我假设当我将 NSBox 的顶部约束到其超级视图(即剪辑视图)的顶部时,它会显示在顶部,但它会显示在底部。
这种行为与我将 NSBox 嵌入到简单的 NSView 中时不同;当我这样做时,具有相同的约束,该框显示在顶部。
为什么会发生这种情况,我该如何解决这个问题?
经过一些实验,我能够解决这个问题。
一半的答案在于 在文档交换时将 NSScrollView 内容设置为左上角而不是左下角:插入一个自定义视图,该视图将
YES
返回到剪辑视图和内容之间的层次结构中的 -isFlipped
。
我能够通过更改约束来解决问题的其余部分:我必须将自定义视图的边缘not约束到容器(NSScrollView的剪辑视图),而是约束到内部视图(在我的测试用例,NSBox)。两个附加约束将自定义“翻转”视图的顶部和左侧边缘连接到剪辑视图。