实际上,不同操作系统的行为略有不同
这就是弹出窗口在 10.10 中以动画方式打开时的样子:
如果仔细观察,您可以看到 NSTextField
我们这里有一个 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 具有背景/边框,而容器 View 保留透明背景。直到弹出窗口完全显示后,背景/边框才会变得透明
怎么会这样?
我尝试过设置背景颜色属性,并尝试在 -awakeFromNib 而不是 init 中设置属性,但无济于事
最佳答案
解决了这个问题,在界面生成器中必须检查“ View 效果检查器”中的 View 和标签,其中设置wantsLayer = YES
也许也可以通过编程来完成
关于objective-c - 带有 NSTextField 的 NSPopover 在打开时显示具有不透明背景的文本字段,然后在弹出动画后变为透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40161722/