NSTextField透明背景

49

我创建了一个透明的NSTextField

self.myTextField = [[NSTextField alloc] initWithFrame:CGRectMake(backgroundView.frame.origin.x + backgroundView.frame.size.width + 20, self.projectTitle.frame.origin.y - 30.0, 100, 20)];
self.myTextField.editable = NO;
self.myTextField.bezeled = NO;
self.myTextField.drawsBackground = YES;
self.myTextField.backgroundColor = [NSColor clearColor];
self.myTextField.selectable = NO;
self.myTextField.font = [NSFont fontWithName:@"Helvetica Neue" size:16];

    [self addSubview:self.compressingTime];

结果文本看起来很糟糕。 在此输入图像描述如果我设置背景颜色

    self.myTextField.backgroundColor = [NSColor colorWithCalibratedRed:0.85 green:0.85 blue:0.85 alpha:1.0];

一切看起来都没问题输入图像描述我还尝试了drawsBackground = NO; 你们知道如何解决吗?


你说的“看起来不好”是什么意思?在我看来它看起来很好啊。 - Vervious
@Vervious 在第二张图片上,看起来启用了抗锯齿,而第一张图片的字体很粗糙。 - pawelropa
8个回答

82

秘密在于将这三个属性全部设置在 NSTextField 上...

myTextField.bezeled         = NO;
myTextField.editable        = NO;
myTextField.drawsBackground = NO;

谢谢,非常完美地适用于修改苹果代码以实现自动填充 NSTableView 的功能。 - Dan Rosenstark
2
只有当父视图的层具有纯色背景时,此方法才有效。@ZsoltSzatmari - mrabin
2
这是最佳答案。在代码中创建NSTextView时,您必须将.isBezeled设置为false,否则由于边框层,您的视图将不透明。谢谢Alex! - Chris
2
啊,AppKit 的乐趣,总是最直观的解决方案。 - Charlton Provatas
3
在我的Xcode9和OSX 10.13.2中,myTextField.bezeled 应该改为 myTextField.isBezeled。而 myTextField.editable 则应该改为 myTextField.isEditable - Todd

19

.xib 文件中有一个属性,在界面构建器窗口的文本字段下,位于属性检查器下

  1. 勾选“显示绘制背景”
  2. 选择背景颜色。选择透明背景的清晰颜色。

输入图像描述


1
通过绘制背景并将背景颜色设置为透明色,解决了我的问题。 - Dima Deplov
这个,而不是排名更高的解决方案,对我起作用了。 - mxcl
此外,在我的情况下,边框(bezel)需要设置为“none”(如图所示的虚线框)。我纠结了几分钟,直到我打开插图并看到额外的差异。 - Jc Nolan

7
截至10.12版本,您只需执行以下操作:
let label = NSTextField(labelWithString: "HELLO")

2

我也来寻找这个问题的答案,我知道如何设置透明灰色背景。关键在于没有边框。以下是我的代码:

最初的回答:

NSTextField *yourLabel = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, width , height * 1.0/3.0)];
yourLabel.editable = false;
yourLabel.bezeled = false;
[yourLabel setTextColor:[NSColor blackColor]];
[yourLabel setBackgroundColor:[NSColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:0.1]];

为了完整起见,我之前已经获取了宽度和高度,因为它们在布局中被多次使用:

最初的回答

height = self.window.frame.size.height;
width = self.window.frame.size.width;

1

我最终使用了 CATextLayer 而不是 NSTextField


0

我有同样的问题。默认外观为空白。我尝试设置暗模式,它起作用了。

self.nameTextField.appearance = [NSAppearance appearanceNamed:NSAppearanceNameVibrantDark];

-2

我刚遇到了这个问题。我通过从NSTextField的superview中移除名为backgroundColor的属性来解决它。

我只是将backgroundColor用作NSView子类上CALayer属性的方便getter/setter。尽管在NSView上没有记录此属性,但看起来我不小心覆盖了NSView上的一个属性。

感谢子类化!


-4
清晰的颜色会使当前视图(即)NSTextView的背景透明,从而使包含NSTextView的NSView的颜色可见。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接