Можем ли мы установить шрифт NSFont font-weight или font-style напрямую, вместо того, чтобы менять имя шрифта?

117
10

Вопрос впереди:


Можно ли получить прямой доступ к информации о шрифте и шрифте для атрибутной строки? Или мы можем создать новую строку, для которой мы можем установить эту информацию?


Объяснение:


В iOS 6 вы можете выбрать выделение полужирным или курсивом. Но то, как это работает, досадно: он не изменяет имя NSFontAttributeName, которое Apple выставила нам (изменение имени шрифта, например, "HelveticaNeue" на "HelveticaNeue-Bold" ). Вместо этого он сохраняет семейство шрифтов как "Helvetica Neue" и изменяет "font-weight" на полужирный шрифт в строке стиля. Если вы хотите спросить экземпляр атрибутного текста для его описания, вы увидите что-то вроде этого для информации о шрифте:


NSFont = "<UICFFont: 0x1fbc53a0> font-family: \"Helvetica Neue\"; font-weight: bold; font-style: normal; font-size: 16px";

Это создает проблему. Мы не можем изменить шрифт, сохраняя жирный и курсивный стиль. Если вы перейдете через обручи сканирования старой атрибутной строки для информации о стиле, создайте новую строку с новым шрифтом, а затем измените имя атрибута шрифта (используя, например, "Courier-Bold" везде, где вы хотите, чтобы это было жирным шрифтом), вы создаете новую проблему: если вы попытаетесь переключить шрифт обратно в нормальный (не жирный), вместо этого вы получите имя шрифта, например "Courier-Bold" и шрифт "жирный", поскольку информация о стиле еще не было смело. И переключение, разумеется, не изменит имя шрифта. Таким образом, вы по существу создали шрифт, который больше не может быть изменен, когда пользователь переключает выделенный текст. Пользователь будет нажимать кнопку "полужирный" в контекстном меню, но ничего не сделает, потому что смелость теперь была жестко указана в имени шрифта, вы могли бы сказать.


Если вы переходите на другой маршрут и пытаетесь переопределить "toggleBoldface" и "toggleItalic" в вашем UITextView, не представляется возможным фактически запретить изменение информации стиля в строке стиля. Вы не можете, по-видимому, изменить имя шрифта только во время события переключения.


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


И двойное разъяснение:


Мы говорим об iOS. Когда вы устанавливаете атрибут атрибута строкой атрибута (NSFontAttributeName) для некоторого диапазона символов, внутренне iOS создает NSFont со строкой стиля. Строка стиля будет читать "font-weight: normal; font-style: normal", если вы сами установили атрибут шрифта. Но эта строка стиля - это то, где сохраняется жирная и курсивная информация, установленная в UITextView (путем переключения).

спросил(а) 2021-01-25T18:56:58+03:00 4 месяца, 3 недели назад
1
Решение
63

Похоже, вы могли бы создать новый CTFontRef с помощью CTFontAttributesRef, где вы установили значение для ключей атрибутов kCTFontWeightTrait и/или kCTFontSymbolicTrait. Помогает ли это?


ср. CTFontDescriptorReference и CTFontReference

ИЗМЕНИТЬ


Угадайте, что это не сработает - я больше изучил это сам... оставив это здесь, если у кого-то другая идея.

ответил(а) 2021-01-25T18:56:58+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема