Подтвердить что ты не робот

Прозрачный фон NSTextField

Я создаю прозрачный 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];

И в результате текст выглядит плохо. enter image description here Если я задаю цвет фона

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

все выглядит нормально enter image description here Я также пробовал с помощью drawsBackground = NO; Вы, ребята, знаете, как это исправить?

4b9b3361

Ответ 1

В итоге я использовал CATextLayer NSTextField.

Ответ 2

Секрет устанавливает ВСЕ ТРЕХ этих свойств на NSTextField...

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

Ответ 3

Существует свойство в файле .xib, в окне построителя интерфейса для текстового поля, под инспектором атрибутов.

  1. Проверьте дисплей рисует фон
  2. Выберите цвет фона. Выберите прозрачный цвет для прозрачного фона.

enter image description here

Ответ 4

Начиная с 10.12 вы можете просто:

let label = NSTextField(labelWithString: "HELLO")

Ответ 5

Пришел сюда в поисках этого и получил фон, чтобы дать мне прозрачный серый. Ключ заключается в том, чтобы не иметь рамку. Мой код ниже:

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;

Ответ 6

Вам не нужно переключаться на CATextLayer, чтобы эффективно использовать приложение для использования слоев для текстового поля. Вы можете просто использовать это вместо:

textField.drawsBackground = NO;
textField.wantsLayer      = YES;

Ответ 7

У меня была эта проблема только сейчас. Я установил его с помощью удаления свойства с именем backgroundColor из надстройки NSTextField.

Я использовал backgroundColor как удобный getter/setter для свойств CALayer в подклассе NSView. Хотя это свойство не задокументировано в NSView, похоже, что я случайно переопределил свойство NSView.

Yay для подкласса! 😒

Ответ 8

Четкий цвет сделает текущий вид (т.е.) фон NSTextView прозрачным, поэтому вид NSView, который содержит NSTextView, будет виден.