带有 NSTextField 的 NSPopover 在打开时显示具有不透明背景的文本字段,然后在弹出动画之后变为透明
NSPopover with a NSTextField shows the text field with an opaque background as it's opening, and then goes transparent after the popover animation
不同操作系统之间的行为实际上略有不同
这是弹出窗口在 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
具有 background/border,并且容器视图保持透明背景。直到弹出窗口完全显示 background/border 也变得透明
这里还有 xib
:
怎么会这样?
我尝试设置背景颜色 属性,并尝试在 -awakeFromNib 中而不是在 init 中设置属性,但无济于事
解决了这个问题,在界面生成器中必须检查 "View Effects Inspector" 中的视图和标签,它设置了 wantsLayer = YES
可能也可以通过编程方式完成
不同操作系统之间的行为实际上略有不同
这是弹出窗口在 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
具有 background/border,并且容器视图保持透明背景。直到弹出窗口完全显示 background/border 也变得透明
这里还有 xib
:
怎么会这样?
我尝试设置背景颜色 属性,并尝试在 -awakeFromNib 中而不是在 init 中设置属性,但无济于事
解决了这个问题,在界面生成器中必须检查 "View Effects Inspector" 中的视图和标签,它设置了 wantsLayer = YES
可能也可以通过编程方式完成