8

我有一个看起来像这样的视图层次结构:

在此处输入图像描述

所以基本上我有一个 NSSplitView 和一个包含滚动视图(用于表格视图)的子视图以及一个包含 3 个子视图的页脚视图。需要注意的一些重要事项:

  • 使用 10.8 基础 SDK,没有自动布局
  • 窗口内容视图、拆分视图、滚动和页脚视图的父视图以及滚动视图和页脚视图都是由NSViewContentsRedrawOnSetNeedsDisplay重绘策略支持的层。
  • the NSClipViewof theNSScrollView是一个特殊的子类,它是一个层托管视图并使用 aCAScrollLayer作为支持层。
  • 颜色视图是一个简单的图层支持视图,具有背景颜色集。
  • 背景视图是一个图层托管视图,它有一个内容属性设置为图像的子图层(还设置了内容中心)
  • 内容视图是一个层支持的容器视图,它包含一个子视图,一个自定义层支持的按钮视图(不是 NSButton)。
  • 页脚视图与滚动视图重叠约 3 个像素

这种布局我的行为非常不稳定。这是我得到的三个不同的场景,每次启动应用程序时都会随机化。

1) 一切正常。背景视图和所有内容都在那里:

在此处输入图像描述

2)按钮看起来很好,但背景视图似乎是部分透明的:

在此处输入图像描述

3)背景视图正确显示,但按钮不见了:

在此处输入图像描述

绝对没有代码在这些场景之间发生变化。我只是停止并再次运行该应用程序。我确保我不会在运行时更改与不透明度相关的任何内容。我在运行时唯一要做的就是在视图上设置背景颜色和图像。

编辑:我觉得重叠的视图可能会造成麻烦,所以我在没有重叠的情况下进行了测试并得到了相同的结果。

编辑 2:这似乎是zPosition层支持视图的层的问题。顺序是加扰和随机的。如果我手动将图层的 zPosition 强制为正确的值以匹配子视图顺序,那么一切都很好。不幸的是,除了设置zPosition.

4

1 回答 1

2

这似乎是一个 OS X 错误。雷达已归档。同时,这是我发现的最好的解决方法(view所有兄弟视图的超级视图在哪里):

view.subviews = [view.subviews copy]

触发 setter 以在视图层上subviews设置正确的值。zPosition

于 2013-03-30T20:36:59.443 回答