There's actually a little different behavior across OSs
This is what the popover looks like as it's animating open in 10.10:
If you look closely, you can see a little opaque border around the NSTextField
Here is what it looks like in 10.11:
There's just a straight up opaque background
And here's what the popover looks like after the animation, fully shown:
Modifying the popover's appearance does not fix the issue:
What we have here is an NSViewController
, which just has a container NSView
, and a NSTextField
. The container is so that we can add padding through auto layout constraints
@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;
}
That's why you can see the border, and only a portion of the popover is opaque. It is that inner NSTextField
that has the background/border, and the container view keeps the transparent background. It isn't until the popover is fully shown that the background/border goes transparent as well
How could this be?
I have tried setting the background color property, and have tried setting the properties in -awakeFromNib instead of in the init, to no avail
Resolved the issue, in interface builder had to check the view and label in the "View Effects Inspector", which sets wantsLayer = YES
Probably could be done programmatically too