gpt4 book ai didi

objective-c - Subview 不会出现在 Mavericks 上;作品《山狮》

转载 作者:行者123 更新时间:2023-12-03 16:28:39 24 4
gpt4 key购买 nike

我在我的 OSX 应用程序中发现了一个问题,我认为这是 Mavericks 的错误。

我有以下层次结构:

NSView->NSScrollView->NSClipView->NSTableView

当 ScrollView 不包含任何记录时,我将创建一个覆盖 View 作为 NSView 的 subview ,并将其放置在其他 subview 之上。我这样做是使用:

[containerView addSubview:overlay
positioned:NSWindowAbove
relativeTo:nil];

仅供引用,覆盖 View 是一个自定义的 NSView 子类,它带有一个用于绘制覆盖本身的drawRect。

在 Mountain Lion 上,此功能正常,但在 Mavericks 上,叠加层不会出现。谷歌搜索后我认为这是因为覆盖层没有位于其他同级 View 之上。

我找到了这些链接供引用:

Display Order Messed Up

Maverick Issue When Adding Subview on NSView (Stack Overflow)

第二个链接建议使用以下代码来解决该问题,它似乎确实如此,但由于我的应用程序中没有任何图层支持的 View ,这感觉有点不对劲:

[overlay setWantsLayer:YES];

除了建议的方法之外,还有人可以建议解决此问题的方法吗?

编辑:我发现,如果我在添加 subview 后的原始代码中放置 Xcode 断点(没有解决方法), subview 就会正确添加,并且我的覆盖 View 被展示。如果我删除断点,则不再显示覆盖 View 。这种行为是否表明了什么?

谢谢

达伦。

最佳答案

看起来您已经被重叠的 View 咬伤了:

Note: 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.

来自苹果的Working With A View Heirarchy .

正如您所注意到的,解决此问题的常见建议是设置一个图层。但是,从 10.4 开始,您可以使用 setHidden: 隐藏 View ,请参阅上述引用中的隐藏 View 。这可能会解决您的特定问题,因为您的重叠似乎是完全的(您不想看到两个 View 的一部分,而只想看到其中一个)。

HTH

关于objective-c - Subview 不会出现在 Mavericks 上;作品《山狮》,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21968402/

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