【问题标题】:Cocoa Auto Layout and Scroll ViewCocoa 自动布局和滚动视图
【发布时间】:2012-12-05 13:49:36
【问题描述】:

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

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

查看图片:

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

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

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

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

【问题讨论】:

  • 我喜欢你的检查员视图。 :-)

标签: cocoa layout nsscrollview autolayout


【解决方案1】:

我通过显式调用子视图上的布局来解决...这有点奇怪...但是我需要在我自己布局之前对我的孩子进行布局(StackPanel)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多