可可自动布局和滚动视图

时间:2012-12-05 13:49:37

标签: cocoa layout nsscrollview autolayout

我正在做一些Property Inspector View之王。我只在外面板上使用自定义布局的自动布局(显式设置框架属性)。让我解释一下:

  • 检查器属性视图的每一行都由InspectorPropertyCell实现,它只使用Autolayout。
  • 有一个StackPanel自定义控件,它堆叠单元格并使用自动布局。对于每个组,都有一个相关的堆栈面板。 04组是在03组内。两者都是可折叠的。
  • 有一个堆叠所有组的外部堆栈面板。此外部堆栈面板使用frame属性显式设置高度。
  • 这全部包含在NSScrollView中。

查看图片:

enter image description here

一切正常但是如果我调整窗口大小以使其内容区域小于整个属性检查器视图(因此我可以滚动属性检查器视图),然后滚动到底部然后折叠最后一个组(组04) ,属性检查器视图缩小并正确执行。此外,相应地调整滚动可视区域。问题是我无法撤消组04的崩溃。

通过在代码中设置几个断点,我发现了问题所在。我只是不知道如何解决它。问题是,当调用updateConstraints传递时(因为我调用-setNeedsUpdateConstraints),不会调用-layout传递。即使我通过调用-layoutSubtreeIfNeeded强制布局传递,自动布局似乎没有效果,因为当我进行折叠时,我设置为0(使用约束)的一些单元格的高度仍为0当我解开时。

再次调用布局传递如果我调整窗口大小。当然,这是不可接受的。

请帮助!我将完全放弃自动布局并仅使用布局进行自定义布局...

1 个答案:

答案 0 :(得分:0)

我通过明确地调用子视图上的布局解决了...这有点奇怪......但是在布置自己(StackPanel)之前我需要让我的孩子们布局。