Пользовательская базовая линия UIFont смещена

У меня проблема с пользовательскими UIFonts. Я загружаю 6 из них (шрифт A в обычном/жирном/обычном курсиве/полужирном курсиве, шрифт B в сжатом/сгущенном наклонном вариантах).

Однако вот что он дает при рендеринге: введите здесь описание изображения

Две первые строки в порядке, но последняя демонстрирует базовую проблему.

Я пытался изменить UPM, восходящий элемент, нижний элемент, x-высоту шрифта в FontLab, чтобы он соответствовал значениям первого шрифта (которые отображаются правильно), но безрезультатно. Я пытался преобразовать формат шрифта из OTF в TTF, но безуспешно. Что бы я ни пробовал, это всегда отображается таким образом.

У кого-нибудь есть опыт в этом?


person Cyrille    schedule 26.01.2012    source источник
comment
Эй, у тебя есть решение для этого. Я пробовал много вещей, но не нашел правильного решения. Даже эта проблема с некоторыми специфическими шрифтами только не у всех.   -  person Mrunal    schedule 18.02.2012
comment
Прокомментируйте мой прогресс: я нашел другой файл .otf для того же шрифта; на этот раз работает отлично. В понедельник утром я изучу различия между двумя шрифтами, в частности раздел Font metrics в FontLab, и сообщу, что найду.   -  person Cyrille    schedule 25.02.2012
comment
Та же проблема: stackoverflow.com/questions/7535498/, stackoverflow.com/questions/5414730/   -  person Pavel Alexeev    schedule 06.03.2012
comment
Спасибо, Павел, согласно моим исследованиям, это действительно была проблема с зажимами. Я исправил это сегодня утром, отредактировав шрифт в FontLab, но в основном я просто сделал то же самое, что и вы с ftxdumperfuser. Если вы не против скопировать/вставить свой ответ сюда, я отмечу его как правильный и дам вам баллы.   -  person Cyrille    schedule 06.03.2012


Ответы (6)


Здесь или даже здесь вы можете найти решения для себя. Все дело в базовой линии.

Примечание. Возникла проблема с установкой Apple Fonts Utility на El Capitan. См. https://apple.stackexchange.com/questions/211138/apple-font-tools-cannot-install-in-macbook-pro-el-capitan для обходного пути.

Чтобы отредактировать их в шрифте, вам необходимо загрузить Apple Font Tool Suite. После того, как вы установили это, вам нужно открыть Терминал и перейти в каталог, содержащий ваш шрифт. После этого введите следующую команду:

  1. ftxdumperfuser -t hhea -A d font.ttf Это создаст файл с именем font.hhea.xml, откроет этот новый файл в текстовом редакторе и настроит значения для надстрочного и подстрочного элементов. Как правило, если ваш шрифт расположен слишком низко, вы хотите уменьшить надстрочный элемент и увеличить подстрочный. После редактирования и сохранения введите в терминал следующую команду, чтобы восстановить файл шрифта:

  2. ftxdumperfuser -t hhea -A f font.ttf Теперь вы можете использовать файл font.ttf в своем приложении. Если шрифт по-прежнему не подходит, просто повторяйте описанную выше процедуру, пока не будете довольны.

ИЛИ вы можете легко изменить NSBaselineAttributeName следующим образом:

NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:@"a string"
                              attributes:@{ NSBaselineOffsetAttributeName : @-13 }];
person art-divin    schedule 28.06.2013
comment
Как и обещал около года назад (см. комментарии к моему вопросу), вот вам баллы! - person Cyrille; 28.06.2013
comment
Я думаю, что NSBaselineOffsetAttributeName устарел в ios6. developer.apple.com/LIBRARY/ios/ releasenotes/General/ Из-за проблем с совместимостью атрибут NSBaselineOffsetAttributeName больше не поддерживается в iOS 6. У меня возникла эта проблема со встроенным Helvetica-Neue =[ Не могу исправить. - person Sean Dunford; 09.04.2014
comment
@SeanDunford UIKIT_EXTERN NSString *const NSBaselineOffsetAttributeName NS_AVAILABLE_IOS(7_0); // NSNumber containing floating point value, in points; offset from baseline, default 0 в основном NSBaselineOffsetAttributeName является специфичной для iOS 7.x константой - person art-divin; 10.04.2014
comment
Apple Font Tools не может быть установлен на Macbook Pro El Capitan. См. раздел apple.stackexchange.com/questions/211138/ для обходных путей. - person Vadim Yelagin; 24.02.2016
comment
@VadimYelagin спасибо, я вставил ваш комментарий в пост. - person art-divin; 17.02.2017
comment
Это сработало для меня. Одна из проблем заключается в том, что он не говорит вам, какие значения использовать для Ascender и Descender. Я использовал 0 на обоих, и все работало нормально (изначально они были что-то вроде 673 и -321). - person user875234; 27.09.2018
comment
Для тех, кто использует Catalina, вот как запустить команду на терминале, если вы также столкнетесь с проблемой, что команда не найдена. суперпользователь .com/questions/1475680/ - person Teffi; 06.12.2019

Привет, я также столкнулся с такой проблемой в то время, когда я установил Title Content Edge соответственно для UIButton.

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

введите здесь описание изображения

Надеюсь, это поможет вам.

person Mrunal    schedule 12.02.2012
comment
Это нормально для UIButtons, но как насчет других элементов управления? Что, если завтра мой клиент захочет другой шрифт? - person Cyrille; 12.02.2012
comment
Просто попробуйте с одним UILabel с выравниванием по центру. Я думаю, вы столкнетесь с этой проблемой только для UIButtons, а не где-либо еще. - person Mrunal; 12.02.2012
comment
Скриншот, прикрепленный к моему вопросу, очевидно, показывает, что я столкнулся с проблемой не только с UIButtons, но и с UITextFields, и фактически для всех элементов управления. Проблема связана с метриками самого шрифта, а не с отображением одного конкретного элемента управления в UIKit. - person Cyrille; 12.02.2012
comment
@Cyrille: для UILable и UITextFields вы можете настроить, изменив его местоположение вверх-вниз, точка зрения конечного пользователя не изменится в пользовательском интерфейсе. Но для кнопки, из-за ее границ, нам необходимо соответствующим образом установить текстовые вставки. - person Mrunal; 07.06.2013

Еще одно интересное решение, которое я нашел, взято из следующего сообщения: http://www.andyyardley.com/2012/04/24/custom-ios-fonts-and-how-to-fix-the-vertical-position-problem/< /а>

Так что вы должны проверить, так ли это с вашим шрифтом, как он говорит там в одном из комментариев:

Мое решение фактически исправляет пользовательский шрифт для работы с механизмом рендеринга iOS, позволяя вам использовать его как прямую замену стандартным шрифтам без каких-либо модификаций.

И как он это делает?

По сути, он предлагает редактировать метрики шрифта с помощью внешнего инструмента Apple (см. справочник по метрикам шрифта по адресу https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/CustomTextProcessing/CustomTextProcessing)..html#//apple_ref/doc/uid/TP40009542-CH4-SW66)

Чтобы отредактировать их в шрифте, вам необходимо загрузить Apple Font Tool Suite. После того, как вы установили это, вам нужно открыть Терминал и перейти в каталог, содержащий ваш шрифт. После этого введите следующую команду:

ftxdumperfuser -t hhea -A d font.ttf

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

ftxdumperfuser -t hhea -A f font.ttf

Теперь вы можете использовать файл font.ttf в своем приложении. Если шрифт по-прежнему не подходит, просто повторяйте описанную выше процедуру, пока не будете довольны.

person Nech    schedule 05.10.2014
comment
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. - person honk; 05.10.2014

Вам нужно проверить эти шрифты рядом в каком-нибудь векторном программном обеспечении, таком как Adobe Illustrator или CorelDraw. Если вы обнаружите, что шрифты отображаются в том же базовом смещенном виде и в этом программном обеспечении, то это как-то связано с самим шрифтом. то есть шрифты могут быть созданы с таким смещением пикселей в файле шрифта. Следовательно, нет необходимости вносить такие изменения в параметры .xib для любого UIButton или UITextField и т. д.

Поделитесь своими файлами шрифтов здесь, если это возможно.

person Ralph    schedule 24.02.2012
comment
Это то, что я собираюсь сделать в FontLab, так как я нашел другой .otf того же шрифта, который не демонстрирует проблемы с базовым уровнем. - person Cyrille; 25.02.2012

возможно, взгляните на свойство UITextView/UITextLabel 'thLabel.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;'

это определяет вертикальное выравнивание. Это было полезно для меня несколько дней назад в подобном случае

person pmk    schedule 24.02.2012
comment
Это хороший обходной путь, но это не настоящее универсальное решение. Например, это не решает проблему выравнивания для UIBarButtonItems. - person Cyrille; 25.02.2012
comment
UITextView не наследуется от UIControl, а UITextLabel не существует в Cocoa Touch, насколько мне известно. Возможно, вы имеете в виду UITextField, который наследуется от UIControl и, таким образом, обладает описанным вами свойством contentVerticalAlignment. - person Tim Arnold; 27.08.2013

Кстати, Apple Font Tool Suite — не единственная программа, которая может вам помочь. Так что, если вы не хотите устанавливать виртуальную копию macOs, вы можете использовать FontForge для Windows, чтобы поиграть с верхним и нижним элементами: элемент -> информация о шрифте, затем вкладка OS/2, а затем метрики. И не забудьте установить флажок «Apple» при создании шрифта в конце. Удачи!

person Able    schedule 13.11.2013