Пользовательский рисунок NSButton портит рендеринг текста

Я создаю подклассы NSButton / NSButtonCell, и все работает нормально, но, по крайней мере, в рисовании Retina, как только я реализую любую из функций рисования в NSButton или NSButtonCell, отрисовка текста изменяется независимо от того, делаю ли я какой-то пользовательский рисунок текста или делегирую прямо к супер реализации.

рисунок кнопки

Как видите, текст становится намного тоньше даже при изменении сглаживания.

Когда я исследую это в Xcode Reveal-rip off, я вижу, что текст встроен в NSButtonTextField, когда ни один из методов рисования не переопределен. Как только любой из методов рисования переопределен, NSButtonTextField исчезает.

Ничего из этого не происходит, когда я вставляю фоновый слой за текстом кнопки и устанавливаю

button.isBorderd = false

но мне это решение не очень нравится.

Есть ли способ получить такой же «жирный» рендеринг текста, не возясь со слоями? Может быть, атрибут строки с атрибутами, специальная команда рисования текста, что-нибудь?

Любая помощь будет оценена /


person Frank R.    schedule 07.11.2016    source источник


Ответы (2)


Мне не удалось воспроизвести вашу работу с фоновым слоем, хотя, возможно, я делал это неправильно.

В итоге я добавил NSTextField в качестве подпредставления к кнопке со следующими атрибутами:

_titleTextField = [[NSTextField alloc] initWithFrame:NSZeroRect];
[_titleTextField setBordered:NO];
[_titleTextField setDrawsBackground:NO];
[_titleTextField setFont:[NSFont systemFontOfSize:13]];
[_titleTextField setTextColor:[FantasticalColors color:@"dimLabelTextColor"]];
[_titleTextField setStringValue:[self title]];
[_titleTextField setEditable:NO];
[_titleTextField setFocusRingType:NSFocusRingTypeNone];
[self addSubview:_titleTextField];

Затем я смог отобразить весь нетекст в drawRect моей ячейки, а затем позволить текстовому полю отображать текст. Тоже не идеально, но это был единственный способ добиться соответствия рендерингу шрифтов.

person adam.wulf    schedule 02.04.2017
comment
Спасибо. Я не думал об этом. - person Frank R.; 03.04.2017

У меня такая же проблема не только в текстах, но и во всем окне. Я решил это, добавив новую строку в приложение Info.plist

Логическое значение с высоким разрешением ДА

Показать это руководство по Apple

До:
Изображение до

После: После изображения

person frang    schedule 10.01.2018