Я потратил много времени на чтение документации, пытаясь выяснить, как избавиться от этой границы. Я посмотрел на непрозрачность на мой взгляд, на слой и подслои. Я устанавливаю цвета фона для очистки. Я перепутал с альфой. Я переписал свое представление без слоев. Ничто не могло избавиться от этой непрозрачной привязки, и я был готов бросить полотенце и предоставить свой контент через NSImage с помощью setTemplate: YES.
В последнем усилии канавы, чтобы понять, что происходит, я написал короткий способ пройти по иерархии вида по поискам точки зрения, что было непрозрачным:
- (void)displayViewInfo:(NSView *)view
{
NSLog(@"view %@\tisOpaque %d, vibrancy %d super %@",
view,view.isOpaque,view.allowsVibrancy, view.superview);
for (NSView *v in view.subviews){
[self displayViewInfo:v];
}
}
Я нашел свойство opaqueAncestor в то время как вчитывался документацию для NSView, и подумал, что это может быть хорошим местом для начала поиска.
Вызывается из моего слоя подкласса NSView drawLayer: inContext: метод таким образом.
[self displayViewInfo:self.opaqueAncestor];
Выход (с отметкой времени информации подстриженной) выглядел так:
view <NSNextStepFrame: 0x610000181380> isOpaque 1, vibrancy 0 super (null)
view <NSVisualEffectView: 0x1006023e0> isOpaque 0, vibrancy 1 super <NSNextStepFrame: 0x610000181380>
view <NSStatusBarButton: 0x600000161bc0> isOpaque 0, vibrancy 1 super <NSVisualEffectView: 0x1006023e0>
view <StatusView: 0x6000001a02a0> isOpaque 0, vibrancy 0 super <NSStatusBarButton: 0x600000161bc0>
opaqueAncestor из На начальном оказался вид корня иерархии и все подвиды докладывали не непрозрачные. Я добавил проверку allowVibrancy после нескольких мутаций метода. Мне было интересно, что супервизоры StatusView позволяли играть, и мой взгляд не был таким. Документация на имущество allowVibrancy смутно многообещающим, так что я добавил это к моему мнению:
- (BOOL)allowVibrancy { return YES; }
Результат говорит сам за себя:
Надеюсь, это рассказ о горе и искупления спасет кого-то когда-то; он был уверен, что я озадачен.