На самом деле поведение разных ОС немного отличается
Вот как выглядит всплывающее окно при анимации открытия в версии 10.10:
Если присмотреться, можно увидеть небольшая непрозрачная рамка вокруг NSTextField
Вот как это выглядит в версии 10.11:
Там просто непрозрачный фон
А вот как выглядит всплывающее окно после полной анимации:
Изменение внешнего вида всплывающего окна не устраняет проблему:
Здесь у нас есть NSViewController
, в котором есть только контейнер NSView
, и NSTextField
. Контейнер таков, что мы можем добавить отступы через ограничения автоматического макета.
@interface MessageViewController ()
@property (strong) IBOutlet NSTextField *messageLabel;
@property (weak) IBOutlet NSLayoutConstraint *rightPadding;
@property (weak) IBOutlet NSLayoutConstraint *topPadding;
@property (weak) IBOutlet NSLayoutConstraint *bottomPadding;
@property (weak) IBOutlet NSLayoutConstraint *leftPadding;
@end
@implementation MessageViewController
@synthesize message = _message;
- (instancetype)initWithMessage:(NSString *)message andPadding:(CGFloat)padding
{
self = [super init];
if( self )
{
[self loadView];
self.rightPadding.constant = padding;
self.topPadding.constant = padding;
self.bottomPadding.constant = padding;
self.leftPadding.constant = padding;
self.message = message;
}
return self;
}
- (void)setMessage:(NSString *)message
{
_message = message;
self.messageLabel.stringValue = message;
}
- (NSString *)message
{
return _message;
}
Вот почему вы можете видеть границу, и только часть всплывающего окна непрозрачна. Именно этот внутренний NSTextField
имеет фон/границу, а представление контейнера сохраняет прозрачный фон. Только после того, как всплывающее окно будет полностью показано, фон/граница также станут прозрачными.
Как это могло произойти?
Я попытался установить свойство цвета фона и попытался установить свойства в -awakeFromNib вместо init, но безрезультатно.