gpt4 book ai didi

objective-c - 层支持/层托管 NSViews 的不稳定行为

转载 作者:太空狗 更新时间:2023-10-30 03:33:47 26 4
gpt4 key购买 nike

我有一个如下所示的 View 层次结构:

enter image description here

所以基本上我有一个 NSSplitView,它有一个包含 ScrollView (用于 TableView )的 subview 以及一个包含 3 个 subview 的页脚 View 。需要注意的一些重要事项:

  • 使用 10.8 基础 SDK,无自动布局
  • 窗口内容 View 、 Split View、 ScrollView 和页脚 View 的父 View ,以及 ScrollView 和页脚 View 都是层支持,带有NSViewContentsRedrawOnSetNeedsDisplay重绘政策。
  • NSScrollViewNSClipView 是一个特殊的子类,它是一个layer hosting View 并使用了一个CAScrollLayer作为背衬层。
  • Color View 是一个简单的图层支持 View ,具有背景颜色集。
  • Background View 是一个layer-hosting View ,其子层的contents 属性设置为图像(contentsCenter 也已设置)
  • Content View 是一个layer backed 容器 View ,它包含一个 subview ,一个自定义layer backed 按钮 View (不是 NSButton) .
  • 页脚 View 与 ScrollView 重叠大约 3 个像素

我在使用此布局时出现了非常不稳定的行为。以下是我遇到的三种不同情况,每次启动应用程序时都会随机出现。

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

enter image description here

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

enter image description here

3) Background View 正常显示但按钮不见了:

enter image description here

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

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

编辑 2: 这似乎是层支持 View 的层的 zPosition 的问题。顺序是乱序和随机的。如果我手动强制图层的 zPosition 为正确的值以匹配 subview 顺序,那么一切都很好。不幸的是,除了设置 zPosition 之外,我找不到更简洁的方法来执行此操作。

最佳答案

这似乎是一个 OS X 错误。 A radar has been filed .与此同时,这是我找到的最佳解决方法(其中 view 是所有同级 View 的父 View ):

view.subviews = [view.subviews 复制]

触发 subviews 的 setter 在 View 层上设置正确的 zPosition

关于objective-c - 层支持/层托管 NSViews 的不稳定行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14186153/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com