【问题标题】:NSTextField transparent backgroundNSTextField 透明背景
【发布时间】:2012-06-20 13:25:21
【问题描述】:

我创建透明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 在第二个 img 上,它看起来像抗锯齿功能,第一个 img 上的字体很粗糙。

标签: macos cocoa nstextfield


【解决方案1】:

秘诀是在NSTextField 上设置所有三个属性...

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

【讨论】:

  • 谢谢,非常适合修改 Apple 代码以编程方式填充 NSTableView
  • 这仅适用于超级视图的图层具有纯色背景色的情况。 @ZsoltSzatmari
  • 这是最好的答案。在代码中创建 NSTextView 时,您必须将 .isBezeled 设置为 false ,否则由于边框层,您的视图将不透明。谢谢亚历克斯!
  • 啊 AppKit 的乐趣,总是最直观的解决方案
  • 在我的 Xcode9 和 OSX 10.13.2 中,myTextField.bezeled 应该是 myTextField.isBezeledmyTextField.editable 应该是 myTextField.isEditable
【解决方案2】:

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

  1. 检查显示绘制背景
  2. 选择背景颜色。为透明背景选择清晰的颜色。

【讨论】:

  • 通过检查绘制背景修复了我的问题并将背景颜色设置为清除颜色
  • 这对我有用,而不是排名更高的解决方案。
【解决方案3】:

从 10.12 开始,您可以这样做:

let label = NSTextField(labelWithString: "HELLO")

【讨论】:

    【解决方案4】:

    来这里也是为了找这个,并且有背景给我一个透明的灰色。关键是没有挡板。我的代码如下:

    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;
    

    【讨论】:

      【解决方案5】:

      我最终使用CATextLayer 而不是NSTextField

      【讨论】:

        【解决方案6】:

        我也有同样的问题。默认外观为空。我尝试设置暗模式,它可以工作。

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

        【讨论】:

          【解决方案7】:

          我刚才遇到了这个问题。我通过从 NSTextField 的超级视图中删除名为 backgroundColor 的属性来修复它。

          我将backgroundColor 用作NSView 子类上CALayer 属性的便捷getter/setter。虽然 NSView 上没有记录这个属性,但看起来我不小心覆盖了 NSView 上的一个属性。

          是的,子类化! ?

          【讨论】:

            【解决方案8】:

            清除颜色将使当前视图(即)NSTextView 的背景透明,因此保存 NSTextView 的 NSView 的颜色可见。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-03-08
              • 2021-09-20
              • 2019-02-07
              • 2020-10-15
              • 2017-06-22
              • 2010-10-20
              • 2011-02-01
              相关资源
              最近更新 更多