【发布时间】:2012-12-20 14:29:48
【问题描述】:
我的视图层次结构如下所示:
所以基本上我有一个带有子视图的 NSSplitView,其中包含一个滚动视图(用于表格视图)以及一个包含 3 个子视图的页脚视图。需要注意的一些重要事项:
- 使用 10.8 基础 SDK,无自动布局
- 窗口内容视图、拆分视图、滚动视图和页脚视图的父视图以及滚动视图和页脚视图都是 layer backed 并带有 NSViewContentsRedrawOnSetNeedsDisplay重绘政策。
-
NSScrollView的NSClipView是一个特殊的子类,它是一个layer hosting 视图并使用CAScrollLayer作为支持层。 - Color View 是一个简单的图层支持视图,具有背景颜色集。
- Background View 是一个 layer-hosting 视图,其子图层的 contents 属性设置为图像(contentsCenter 也已设置)
- Content View 是一个 layer backed 容器视图,它包含一个子视图,一个自定义 layer backed 按钮视图(不是 NSButton) .
- 页脚视图与滚动视图重叠约 3 个像素
这种布局的行为非常不稳定。以下是我得到的三种不同场景,每次启动应用程序时都会随机化。
1) 一切正常。背景视图和所有内容都在那里:
2) 按钮看起来不错,但背景视图似乎是部分透明的:
3) 背景视图正常显示,但按钮不见了:
在这些场景之间绝对没有代码发生变化。我只是停止并再次运行该应用程序。我确保我不会在运行时更改与不透明度相关的任何内容。我在运行时唯一要做的就是在视图上设置背景颜色和图像。
编辑:我感觉重叠的视图可能会造成麻烦,所以我在没有重叠的情况下进行了测试,得到了相同的结果。
编辑 2: 这似乎是层支持视图的层的zPosition 的问题。顺序是加扰和随机的。如果我手动将图层的 zPosition 强制为正确的值以匹配子视图顺序,那么一切都很好。不幸的是,我找不到比设置zPosition 更简洁的方法。
【问题讨论】:
-
您运行的是 OS X 的 Beta 版吗?在 10.8.3 测试版下,我在层和层支持的东西方面有过一些非常糟糕的经历。
标签: objective-c cocoa core-animation calayer nsview