【发布时间】:2016-09-07 08:11:31
【问题描述】:
我遇到了NSWindow 的问题,它的内容视图 - 标题栏的外观和圆角底角是具体的。我在 10.11 和 10.10 上观察到这个问题,一切看起来都很好。但切中要害。
窗口的标题栏如下所示:
同时底部看起来像这样:
没有圆角。 窗口以编程方式启动,它由两个以编程方式添加的子视图组成,通过使用 self.contentView addSubview: 方法。
经过一些工作发现,添加
[self.contentView setWantsLayer:YES];
在窗口初始化的开头,标题栏如下所示:
比正常颜色更深的平面和实心 - 不好。 另一方面,底部看起来像我需要的样子:
我不能显示更多的窗口。 这是我的实验的初始化:
[self.contentView setWantsLayer:YES];
self.identifier = someid;
self.styleMask = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask;
self.backingType = NSBackingStoreBuffered;
[self setFrame:NSMakeRect(0, 0, windowInitWidth, windowInitHeight) display:NO];
[self setBackgroundColor:[NSColor colorForKeyPath:@"blackcolor"]];
NSButton *windowButton = [self standardWindowButton:NSWindowCloseButton];
[windowButton setEnabled:NO];
[self centerOnMainWindowScreen];
[self setupLeftPanel];
[self setupRightPanel];
[self setupConstraints];
任何帮助,这将解释为什么会发生这种情况(绘制窗口元素的顺序是什么?)以及如何正确初始化窗口,感谢。 再一次:它在 10.10 上都可以正常工作。 10.11 导致绘图损坏。
【问题讨论】:
-
我认为标题栏变暗是由背景颜色引起的,而不是由图层引起的。
-
您是否尝试过不理会内容视图,而是添加一个子视图来填充它并使该层支持?
-
@Sulthan - 我尝试将颜色 ([self setBackgroundColor:]) 更改为黑白而不是设置颜色。当 contentView 不是 layer-backed 时,Bar 是正常的。
-
@KenThomases - 是的,我做到了。我创建了新的 NSView 并将其链接到 contentView (addSubiew)。行为是相同的 - 底部的角不圆 - [intermediatelayer setWantsLayer:YES] 时的黑色标题栏。
-
你能创建一个Minimum Complete and Verifiable Example 吗?我在我的窗口中尝试了您的代码,但一切正常。标题栏的唯一变化是由背景颜色引起的(黑色背景使整个窗口变暗)。
标签: objective-c cocoa nsview nswindow osx-elcapitan