【发布时间】:2014-03-24 23:20:58
【问题描述】:
我在我的 OSX 应用程序中发现了一个我认为是 Mavericks 错误的问题。
我有以下层次结构:
NSView ->NSScrollView ->NSClipView ->NSTableView
当滚动视图不包含任何记录时,我将创建一个覆盖视图作为 NSView 的子视图,并将其定位在其他子视图之上。我这样做是:
[containerView addSubview:overlay
positioned:NSWindowAbove
relativeTo:nil];
仅供参考,覆盖视图是一个自定义的 NSView 子类,带有一个 drawRect 来绘制覆盖本身。
在 Mountain Lion 上,这可以正常工作,但在 Mavericks 上,叠加层不会出现。谷歌搜索我认为这是因为覆盖没有位于其他同级视图之上。
我找到了这些链接以供参考:
Maverick Issue When Adding Subview on NSView (Stack Overflow)
第二个链接建议使用以下代码来解决问题,它似乎可以解决问题,但由于我的应用程序中没有任何支持层的视图,这感觉有点不对劲:
[overlay setWantsLayer:YES];
除了建议的问题之外,任何人都可以建议解决此问题的方法吗?
编辑:我发现如果我在添加子视图后的原始代码中放置一个 Xcode 断点(没有解决方法),则子视图会正确添加,并且我的叠加视图被展示。如果我删除断点,则不再显示覆盖视图。这种行为是否表明了什么?
谢谢
达伦。
【问题讨论】:
-
首先使用 Xcode 5 查看您使用的任何方法是否已在 10.9 下被弃用。
-
所有核心方法在 10.9 中似乎都有效。
-
你不使用类似 constrainScrollPoint 的东西吗?
-
我绝对不用那个。
标签: objective-c cocoa osx-mavericks nsview subview