2016-05-11 5 views
4

У меня проблема с NSWindow, и это контентное представление - с появлением заголовка и закругленных нижних углов. Я наблюдаю за проблемой 10.11, а 10.10 все выглядит хорошо. Но к делу.setWantsLayer изменяет поведение NSWindow

В строке заголовка окна выглядит так:

correct titlte bar

и на то же время внизу выглядит следующим образом:

enter image description here

Нет закругленные углы. Окно инициируется программным способом и состоит из двух подзапросов, добавленных программно, с использованием метода self.contentView addSubview:.

После некоторых работ выяснилось, что добавление

[self.contentView setWantsLayer:YES]; 

в начале окна инициализации панели Tittle выглядит следующим образом:

enter image description here

плоский и твердый темнее, чем нормальный цвет - не хорошо. С другой стороны, снизу выглядит как мне нужно, чтобы она выглядела так:

enter image description here

Я не позволил показать больше окон. А вот INIT с моими экспериментами:

[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 вызывает искажение.

+0

Я думаю, что затемненная строка заголовка вызвана цветом фона, а не слоем. – Sulthan

+0

Вы пробовали оставить только просмотр контента и вместо этого добавить подзаголовок, который заполняет его и создает этот слой? –

+0

@Sulthan - Я попробовал изменить цвет ([self setBackgroundColor:]) на черно-белый и не устанавливать цвет. Бар нормальный, когда contentView не поддерживается на уровне слоев. – dobry

ответ

0

В конце концов, вы, ребята, были правы. Мне не удалось создать минимальный полный и проверенный пример, но я решил изменить цвет фона окна на прозрачный цвет. Я не знаю, почему он был первоначально настроен на серый (он был серым, когда я получил задание), но изменение его на прозрачность не влияет на какие-либо компоненты, наложенные на него позже.

Так что это решение для меня, но все же, интересно, почему панель заголовков затронута, когда содержимое окна содержимого Window поддерживается.

0

У меня нет решения, но я может воспроизвести это надежно (совсем недавно на macOS 10.12.2), так что это не только вы. Сохраните и запустите ниже: 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() 
Смежные вопросы