5

z 排序如何与 Cocoa 中的兄弟 NSView 一起使用?我很困惑,因为我在 Apple 的文档和 API 中发现了相互矛盾的信息来源。(注意:子视图显然是在其父视图之上呈现的,我在这里明确谈论的是兄弟视图)。

假设 A“是的,您可以定义兄弟的 z 顺序NSViews

  • IB您可以将视图放在彼此之上,它们将始终以您期望的方式组合。
  • Xcode 中的Editor菜单下有名为“Send to Back”、“Send Forward”等的按钮。
  • NSView也有一个名为的方法,- (void)addSubview:(NSView *)aView positioned:(NSWindowOrderingMode)place relativeTo:(NSView *)otherView;它似乎暗示有一个明确定义的排序。

假设 B“不可能,兄弟的 z 顺序NSViews在运行时是未定义的。有时有效,有时无效。不要相信它!”

  • Apple 的文档(查看编程指南)状态:For performance reasons, Cocoa does not enforce clipping among sibling views or guarantee correct invalidation and drawing behavior when sibling views overlap. If you want a view to be drawn in front of another view, you should make the front view a subview (or descendant) of the rear view.

那么是哪一个呢?

4

2 回答 2

3

是的,允许 NSView 兄弟姐妹重叠,Apple 文档已过时:是否允许图层支持的 NSView 兄弟姐妹重叠?

此外,z 顺序取决于父视图subviews数组中子视图的顺序。

于 2013-02-07T12:07:56.120 回答
3

我一直在解决同样的问题,发现至少在 Mavericks 上它只适用于支持层的视图。到目前为止,我还没有机会在其他 OS X 版本上对其进行测试,但是在 Mavericks 上,您必须将所有要重叠的视图设置为才能使其正常工作wantsLayerYES

于 2014-08-25T09:27:16.313 回答