【问题标题】:NSScrollView Overlay MavericksNSScrollView 覆盖小牛
【发布时间】:2015-04-09 21:28:37
【问题描述】:

自从 Mavericks 以来,我的应用程序中存在以下问题:我以编程方式创建了一个具有窗口大小的 NSBox。然后我将它作为子视图添加到 windows contentView。所以我想覆盖视图上的所有界面元素。自从 Mountain Lion 以来,这非常有效,在 Mavericks 中,NSScrollView 不会被覆盖。

也许你可以在苹果的一个类似例子中看到它。 https://developer.apple.com/library/mac/samplecode/OverlayView/Introduction/Intro.html

任何解决方法的提示?这似乎是一个错误,但我没有 Apple Dev Account 来提交错误。

【问题讨论】:

  • 那你为什么不创建一个免费的 Apple Developer 帐户并提交错误呢?
  • 我认为您需要有一个付费的 Mac OS 开发者帐户?顺便说一句,通过事件解决了问题(解决方案如下!)

标签: objective-c cocoa


【解决方案1】:

我认为更好的解决方案是实施

- (BOOL)wantsLayer

并返回 NO。

Apple 显然在 10.9 中更改了 NSScrollView,因此它在图层中绘制——为了特殊的滚动效果或速度,或者只是为了给我们一些事情做,因为我们都工作不足。这会影响 NSTextViews、NSTableViews 和 PDFViews 等。我见过很多情况(例如,我的应用程序的主文档视图)这很好,但在某些情况下它会严重混乱。两个示例:一个调整大小的首选项面板,当您更改窗格时动画淡入/淡出,以及一个包含可以折叠的部分的详细视图。在后一种情况下,如果您在 10.9 中单击表格视图,表格视图会消失,然后如果您打开折叠的部分,它会重新出现 UPSIDE DOWN。

通过拒绝使用上面提到的图层,您拒绝参与这种疯狂并迫使滚动视图以旧方式绘制。

【讨论】:

  • 谢谢!现在我也有了完美的解释。
【解决方案2】:

afaik,仅图层支持的视图支持叠加同级视图。不推荐相互重叠的非图层支持视图。对于某些 osx 版本,这种情况不能保证正确绘制。您最好的长期解决方案是让您的叠加视图成为图层支持的视图

【讨论】:

  • 好点 - 为覆盖视图启用wantsLayer 对我来说效果很好。干杯!
【解决方案3】:

哈哈,碰巧找到了解决方案(我什至不知道,为什么它会起作用^^)。我创建了一个 NSScrollView 的子类并添加了这个:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
    return;
}

【讨论】:

  • 愚蠢的 hack - 请参阅 Radu 的答案以了解正确的方法
猜你喜欢
  • 1970-01-01
  • 2016-10-12
  • 1970-01-01
  • 2023-03-24
  • 2015-09-20
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 2011-12-23
相关资源
最近更新 更多