Вертикальне вирівнювання шрифту UIButton


118

У мене є UIButtonякий використовує спеціальний шрифт, який встановлюється, коли мій вигляд завантажується:

- (void)viewDidLoad
{
    [super viewDidLoad];    
    self.searchButton.titleLabel.font = [UIFont fontWithName: @"FONTNAME" size: 15.0 ];
}

Проблема, яку я маю, полягає в тому, що шрифт виглядає як би плаваючим по центральній лінії. Якщо я коментую цей рядок, шрифт за замовчуванням виглядає штрафом по вертикалі. Але зміна спеціального шрифту порушує вертикальне вирівнювання.

Я отримую ту саму проблему і в комірці таблиці з власним шрифтом.

Чи потрібно мені десь сказати погляду, що нестандартний шрифт не такий високий, як інші шрифти?

EDIT: Я щойно зрозумів, що шрифт, який я використовую, - це шрифт Windows TrueType. Я можу це добре використовувати в TextEdit на Mac, лише проблема з вирівнюванням у моєму додатку

Текст кнопки не по центру вертикально


У мене те саме питання з цим шрифтом (.otf, не .ttf): fontsquirrel.com/fonts/bebas-neue
Neal Ehardt

Відповіді:


312

Аналогічну проблему обговорювали у встановленому на замовлення шрифті, який неправильно відображається у UILabel . Рішення не було дано.

Ось рішення, яке працювало на моєму власному шрифті, який мав ту саму проблему в UILabel, UIButton тощо. Проблемою з шрифтом виявився той факт, що його властивість висхідної форми була занадто малою порівняно зі значенням системних шрифтів. Ascender - це вертикальний пробіл над символами шрифту. Щоб виправити свій шрифт, вам доведеться завантажити утиліти командного рядка Apple Font Tool Suite . Потім візьміть свій шрифт і зробіть наступне:

~$ ftxdumperfuser -t hhea -A d Bold.ttf

Це створить Bold.hhea.xml. Відкрийте його за допомогою текстового редактора та збільште значення ascenderатрибута. Вам доведеться трохи експериментувати, щоб з’ясувати точне значення, яке найкраще підходить для вас. У моєму випадку я змінив його з 750 на 1200. Потім знову запустіть утиліту із наступного командного рядка, щоб об’єднати ваші зміни назад у файл ttf:

~$ ftxdumperfuser -t hhea -A f Bold.ttf

Потім просто використовуйте отриманий шрифт ttf у вашому додатку.

OS X El Capitan

Інсталятор Apple Font Tool Suite більше не працює на OSX El Capitan через SIP, оскільки він намагається встановити бінарні файли в захищений каталог. Ви повинні вручну витягнути ftxdumperfuser. Спочатку скопіюйте PKG з DMG в локальний каталог після Розпакування OS X Font Tools.pkgз

~$ xar -xf OS\ X\ Font\ Tools.pkg

Тепер перейдіть у папку за fontTools.pkgдопомогою

~$ cd fontTools.pkg/

Витяг корисного навантаження з

~$ cat Payload | gunzip -dc | cpio -i

Тепер ftxdumperfuserдвійковий файл знаходиться у вашій поточній папці. Ви можете перемістити його /usr/local/bin/так, щоб ви могли використовувати його у кожній папці всередині додатку терміналу із наступним.

~$ mv ftxdumperfuser /usr/local/bin/

4
+1 Чудова порада! Ось деяка інформація про висхідних і низхідних typophile.com/node/13081
tidwall

35
Працювали однаково добре для файлів OTF.
mharper

2
Якщо ви використовуєте нестандартний шрифт, модифікований за допомогою цього рішення, і ви встановлюєте текст, тобто в UITextView з кількома рядками, відстань міжрядкової лінії стає занадто великою.
Чувак

5
Я виявив, що в iOS 7 beta 6 вони вирішили проблему вирівнювання шрифту. Тож якщо ви зробите це виправлення, буде добре в iOS 6, але зламано в iOS 7 .... 7 все ще знаходиться в бета-версії, тож хто знає
tybro0103

3
Інструменти шрифту оновлено для Xcode 9, вони встановлені на High Sierra. Пряме посилання: developer.apple.com/download/more/?=font
Andrés Pizá Bückmann

49

Я вирішив проблему з коригуванням вкладеного верхнього вмісту (а не заголовка!).

Наприклад: button.contentEdgeInsets = UIEdgeInsetsMake (10,0, 0,0, 0,0, 0,0);

Удачі!


15
Це було хорошим швидким рішенням для мене, яке здавалося простішим, ніж спроба редагувати шрифт. myButton.titleLabel.font = [UIFont fontWithName: @ "FontName" розмір: 20,0]; myButton.contentEdgeInsets = UIEdgeInsetsMake (3,0, 0,0, 0,0, 0,0);
Джеймі Хамік

Блискуче! Дякую! Моя проблема була дещо іншою, у мене були прості кнопки + і -, використовуючи шрифт за замовчуванням, і вони виглядали нижче, ніж по центру, я зміг використати рішення тут, щоб трохи підняти текст, щоб він не виглядав.
Патрік Т Нельсон

7

Не впевнений, чи це допоможе, оскільки це може залежати від вашого шрифту, але може бути, що ваша базова лінія не вирівняна.

self.searchButton.titleLabel.baselineAdjustment = 
    UIBaselineAdjustmentAlignCenters;

3
Чудово працює на titleLabel для UIButton, коли розмір шрифту коригується мінімальним масштабомFactor
smitt04

6

Я думаю, що це найкраща відповідь. немає гри з асцендером, numberOfHMetrics тощо ... просто імпорт-експорт за допомогою програми Glyphs та робота. Завдяки цій відповіді: https://stackoverflow.com/a/16798036/1207684


Ти врятував мій день!
Алеш Оскар Кокур

Мій також! Дякую, пане.
Хуан Сагасті

2

Ви можете спробувати це в Interface Builder. Ось знімок того, як це зробити -

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

Як бачите, спроба зробити це в ІБ має свої переваги.


1
Це налаштування вже встановлено, і в IB шрифт відображається вертикально, але відображається як шрифт за замовчуванням. Лише коли я запускаю свою програму, з’являється моє спеціальне обличчя шрифту, і воно не зосереджене вертикально
Pete

ви встановлюєте свій "нестандартний шрифт" у IB? чи підтримується вона в шрифтах iOS?
Шрікар Аппалараджу

Шрифт встановлюється в IB, а також за кодом, вказаним у моїй оригінальній публікації. Насправді він не відображається в макеті екрана IB, хоча в IB випадає шрифт вибору шрифту.
Піт

2

Запізнився на вечірку, але оскільки ця проблема вразила мене вже вчетверте, я подумав, що опублікую найпростіше рішення, яке я знайшов: використання Python FontTools .

  1. Встановіть Python 3, якщо він недоступний у вашій системі.

  2. Встановіть FontTools

    pip3 install fonttools

    FontTools включає інструмент TTX, який дозволяє конвертувати в XML і з нього.

  3. Перетворіть свій шрифт у .ttx у тій же папці

    ttx myFontFile.otf

  4. Зробіть необхідні зміни для .ttx та видаліть .otf файл, оскільки це буде замінено на наступному кроці.

  5. Перетворити файл назад у .otf

    ttx myFontFile.ttx


Мотивація: рішення по kolyuchi є неповним, і навіть з цим розширеним потоком установки , працює ftxdumperfuserв результаті помилки на 10.15.2 Каталине.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.