z-ordering如何与Cocoa中的兄弟NSView一起使用?我很困惑因为我在Apple的文档和API中发现了相互矛盾的信息来源。 (注意:子视图显然是在其父视图的顶部呈现的,我在这里明确谈论兄弟视图)。
假设A :“是的,您可以定义同级NSViews
IB
中,您可以将视图放在彼此之上,并且它们将始终按照您期望的方式进行合成。Editor
菜单下的按钮名为“Send to Back”,“Send Forward”等。NSView
还有一个名为- (void)addSubview:(NSView *)aView positioned:(NSWindowOrderingMode)place relativeTo:(NSView *)otherView;
的方法,这似乎意味着定义明确。 假设B :“没办法,兄弟NSViews
的z顺序在运行时是未定义的。有时候它有效,有时则不然。不要相信它!“的
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.
那是哪一个?
答案 0 :(得分:3)
是的,NSView兄弟 允许重叠,Apple文档已过时:Are layer-backed NSView siblings allowed to overlap?
此外,z顺序取决于父视图的subviews
数组中子视图的顺序。
答案 1 :(得分:2)
我一直在解决同样的问题,并发现至少在Mavericks上它只适用于图层支持的视图。到目前为止,我没有机会在其他OS X版本上测试它,但是对于Mavericks,您必须在要重叠的所有视图上将wantsLayer
设置为YES
才能使其正常工作