Ответ 1
В итоге я использовал CATextLayer
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];
И в результате текст выглядит плохо.
Если я задаю цвет фона
self.myTextField.backgroundColor = [NSColor colorWithCalibratedRed:0.85 green:0.85 blue:0.85 alpha:1.0];
все выглядит нормально
Я также пробовал с помощью
drawsBackground = NO;
Вы, ребята, знаете, как это исправить?
В итоге я использовал CATextLayer
NSTextField
.
Секрет устанавливает ВСЕ ТРЕХ этих свойств на NSTextField
...
myTextField.bezeled = NO;
myTextField.editable = NO;
myTextField.drawsBackground = NO;
Существует свойство в файле .xib, в окне построителя интерфейса для текстового поля, под инспектором атрибутов.
Начиная с 10.12 вы можете просто:
let label = NSTextField(labelWithString: "HELLO")
Пришел сюда в поисках этого и получил фон, чтобы дать мне прозрачный серый. Ключ заключается в том, чтобы не иметь рамку. Мой код ниже:
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;
Вам не нужно переключаться на CATextLayer
, чтобы эффективно использовать приложение для использования слоев для текстового поля. Вы можете просто использовать это вместо:
textField.drawsBackground = NO;
textField.wantsLayer = YES;
У меня была эта проблема только сейчас. Я установил его с помощью удаления свойства с именем backgroundColor
из надстройки NSTextField.
Я использовал backgroundColor
как удобный getter/setter для свойств CALayer в подклассе NSView. Хотя это свойство не задокументировано в NSView, похоже, что я случайно переопределил свойство NSView.
Yay для подкласса! 😒
Четкий цвет сделает текущий вид (т.е.) фон NSTextView прозрачным, поэтому вид NSView, который содержит NSTextView, будет виден.