2016-05-11 8 views
4

Ich habe ein Problem mit NSWindow und es ist Content-Ansicht - mit Aussehen der Titelleiste und abgerundeten unteren Ecken, um spezifisch zu sein. Ich beobachte das Problem am 10.11 und am 10.10 sieht alles gut aus. Aber auf den Punkt.setWantsLayer ändert Verhalten von NSWindow

Die Titelleiste des Fensters wie folgt aussieht:

enter image description here

keine abgerundeten Ecken:

correct titlte bar

und gleichzeitig unten sieht wie folgt aus. Fenster wird programmgesteuert initiiert und es besteht aus zwei Teilansichten, die programmgesteuert mithilfe von self.contentView addSubview: method hinzugefügt werden.

Nach einiger Arbeit fand heraus, dass init der tittle bar

[self.contentView setWantsLayer:YES]; 

am Anfang des Fensters das Hinzufügen dieser wie folgt aussieht:

enter image description here

Wohnung und feste dunkler als normale Farbe - nicht gut. Auf der anderen Seite unten sieht aus, als ich es brauche aussehen:

I

enter image description here

bin mehr die Fenster zu zeigen, nicht erlaubt. Und hier ist die init mit meinen Versuchen:

[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]; 

Jede Hilfe, die das passiert wird erklären, warum ist (?, Was die Reihenfolge der Zeichnung Fensterelemente ist) und wie man richtig init Fenster, geschätzt. Noch einmal: es funktioniert gut in 10.10 beide Möglichkeiten. 10.11 verursacht beschädigtes Zeichnen.

+0

Ich denke, die abgedunkelten Titelleiste durch die Hintergrundfarbe verursacht wird, nicht durch die Schicht. – Sulthan

+0

Haben Sie versucht, die Inhaltsansicht in Ruhe zu lassen und stattdessen eine Unteransicht hinzuzufügen, die diese füllt und diese Schicht unterstützt? –

+0

@Sulthan - Ich habe versucht, die Farbe ([self setBackgroundColor:]) auf schwarz und weiß zu ändern und nicht die Farbe zu setzen. Der Balken ist normal, wenn contentView nicht mit Ebenen versehen ist. – dobry

Antwort

0

Immerhin hatten Sie recht. Ich war nicht in der Lage, ein minimales vollständiges und überprüfbares Beispiel zu erstellen, aber ich beschloss, die Hintergrundfarbe des Fensters in eine transparente Farbe zu ändern. Ich weiß nicht, warum es anfänglich auf grau gesetzt wurde (es war grau, als ich die Aufgabe bekam), aber die Änderung auf transparent wirkt sich nicht auf irgendwelche Komponenten aus, die später darauf gesetzt werden.

Also das ist eine Lösung für mich, aber immer noch, ich frage mich, warum Titelleiste betroffen ist, wenn Fenster ContentView Layer-Backed ist.

0

Ich habe keine Lösung, aber ich kann reproduzieren dies zuverlässig (zuletzt auf macOS 10.12.2), so ist es nicht nur Sie. Speichern Sie und führen Sie die unten mit swift:

import Cocoa 

let window = NSWindow() 
window.setContentSize(NSSize(width: 100, height: 100)) 
window.center() 

let layeredView = NSView(frame: window.contentView!.frame) 
layeredView.autoresizingMask = [.viewWidthSizable, .viewHeightSizable] 
layeredView.wantsLayer = true 
layeredView.layer!.backgroundColor = NSColor.blue.cgColor 
window.contentView!.addSubview(layeredView) 

window.makeKeyAndOrderFront(nil) 

NSApplication.shared().run()