objective-c - 带有 NSTextField 的 NSPopover 在打开时显示具有不透明背景的文本字段,然后在弹出动画后变为透明

标签 objective-c macos cocoa nstextfield nspopover

实际上,不同操作系统的行为略有不同
这就是弹出窗口在 10.10 中以动画方式打开时的样子:
enter image description here
如果仔细观察,您可以看到 NSTextField

周围有一些不透明的边框

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

这是动画后弹出窗口的样子,完全显示:
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 具有背景/边框,而容器 View 保留透明背景。直到弹出窗口完全显示后,背景/边框才会变得透明

这里还有xib:
enter image description here

怎么会这样?

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

最佳答案

解决了这个问题,在界面生成器中必须检查“ View 效果检查器”中的 View 和标签,其中设置wantsLayer = YES

也许也可以通过编程来完成

关于objective-c - 带有 NSTextField 的 NSPopover 在打开时显示具有不透明背景的文本字段,然后在弹出动画后变为透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40161722/

相关文章:

objective-c - NSComboBox 中的奇怪错误 : selectItemAtIndex does not work correctly when using data source

ios - 如何在另一个 ViewController 上显示推送通知。我在所有三种情况下都在 Appdelegate 页面上收到了它

ios - SecItemAdd 在 OS X 上不工作,在 iOS 上工作

c - 在 Mac OS 中我可以使用什么来代替#include<graphics.h>?

iOS CollectionView 'NSInternalInconsistencyException'

ios - 在运行时在 objective-c 中获取类对象的大小

android - Cordova 插件安装 MAC

objective-c - 如何在 NSView (Mac OS X) 上显示徽章

objective-c - 如何以编程方式打开 NSComboBox 的列表?

ios - 使用自定义按钮重新排序 tableview 单元格