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


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

Серая граница при использовании 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 не изменяет внешний вид). Я попытался отключить тень, и ... переключая многочисленные настройки для моего окна, но я, кажется, не могу удалить эту серую границу:

Введите описание изображения здесь

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

Edit: это происходит даже при использовании простого NSView, даже не разделенного представления.


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

1 2

1 ответ:

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

- (BOOL)hasShadow {
    return NO;
}

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

[myview setBorderType:NSNoBorder];