带有NSTextField的NSPopover在打开时显示带有不透明背景的文本字段,然后在弹出式动画

时间:2016-10-20 18:18:44

标签: objective-c macos cocoa nstextfield nspopover

操作系统实际上有一些不同的行为 这就是popover的样子,因为它在10.10中打开了动画:
enter image description here
如果仔细观察,可以在NSTextField

周围看到一个不透明的边框

这是10.11中的样子:
enter image description here 只有一个直观的不透明背景

以下是动画后popover的样子,完全显示:
enter image description here

修改弹出框的外观并不能解决问题:
enter image description here

我们这里有一个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具有背景/边框,容器视图保持透明背景。直到弹出窗口完全显示背景/边框也变得透明

此处还有xib
enter image description here

怎么会这样?

我尝试过设置背景颜色属性,并尝试在-awakeFromNib中设置属性而不是在init中,但无济于事

1 个答案:

答案 0 :(得分:0)

解决了这个问题,在界面构建器中必须检查" View Effects Inspector"中的视图和标签,它设置wantsLayer = YES

也许可以通过编程方式完成