Серая рамка вокруг вида при использовании NSBorderlessWindowMask - PullRequest
2 голосов
/ 03 февраля 2012

У меня та же проблема, что и в этом вопросе:

Серая рамка при использовании NSBorderlessWindowMask

Однако принятый ответ (как в комментариях)удаление тени окна, похоже, не работает, по крайней мере, на Lion.


Я подклассифицировал NSWindow и создал окно без полей следующим образом:

-(id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag {

    self = [super initWithContentRect:contentRect 
                            styleMask:(NSBorderlessWindowMask | NSResizableWindowMask)
                              backing:bufferingType 
                                defer:flag];

    [self setMovableByWindowBackground:YES];
    [self setOpaque:NO];
    [self setBackgroundColor:[NSColor clearColor]];
    [self setHasShadow:YES];

    [self setLevel:NSMainMenuWindowLevel];
    return self;
}

Обратите внимание, что это приложение будет работать только на Lion (поэтому NSResizableWindowMask не меняет внешний вид).Я попытался отключить тень и переключить многочисленные настройки для моего окна, но я не могу удалить эту серую рамку:

enter image description here

Нигде в моем коде я не добавляю границу.Я просто добавил NSSplitView в Интерфейсном Разработчике в окне.Во время выполнения я добавляю цветной вид в качестве подпредставления на левую панель разделенного вида, полностью заполняя границы левого разделенного вида.

Редактировать: это происходит даже при использовании простого NSView,даже не разделенный вид.


TL;DR: Почему у моего NSView есть серая рамка вокруг него?

1 Ответ

2 голосов
/ 05 июня 2012

хорошо, понял. чтобы удалить тень, просто добавьте это к вашему NSWindow подклассу:

- (BOOL)hasShadow {
    return NO;
}

и чтобы удалить границу, вам нужно знать, что эта граница исходит от вида, а не от окна (как вы сказали это при редактировании). Таким образом, вы должны отключить границу для просмотра с помощью этого кода:

[myview setBorderType:NSNoBorder];
...