我有一个看起来像这样的视图层次结构:
所以基本上我有一个 NSSplitView 和一个包含滚动视图(用于表格视图)的子视图以及一个包含 3 个子视图的页脚视图。需要注意的一些重要事项:
- 使用 10.8 基础 SDK,没有自动布局
- 窗口内容视图、拆分视图、滚动和页脚视图的父视图以及滚动视图和页脚视图都是由NSViewContentsRedrawOnSetNeedsDisplay重绘策略支持的层。
- the
NSClipView
of theNSScrollView
是一个特殊的子类,它是一个层托管视图并使用 aCAScrollLayer
作为支持层。 - 颜色视图是一个简单的图层支持视图,具有背景颜色集。
- 背景视图是一个图层托管视图,它有一个内容属性设置为图像的子图层(还设置了内容中心)
- 内容视图是一个层支持的容器视图,它包含一个子视图,一个自定义层支持的按钮视图(不是 NSButton)。
- 页脚视图与滚动视图重叠约 3 个像素
这种布局我的行为非常不稳定。这是我得到的三个不同的场景,每次启动应用程序时都会随机化。
1) 一切正常。背景视图和所有内容都在那里:
2)按钮看起来很好,但背景视图似乎是部分透明的:
3)背景视图正确显示,但按钮不见了:
绝对没有代码在这些场景之间发生变化。我只是停止并再次运行该应用程序。我确保我不会在运行时更改与不透明度相关的任何内容。我在运行时唯一要做的就是在视图上设置背景颜色和图像。
编辑:我觉得重叠的视图可能会造成麻烦,所以我在没有重叠的情况下进行了测试并得到了相同的结果。
编辑 2:这似乎是zPosition
层支持视图的层的问题。顺序是加扰和随机的。如果我手动将图层的 zPosition 强制为正确的值以匹配子视图顺序,那么一切都很好。不幸的是,除了设置zPosition
.