Вертикальное выравнивание шрифта UIButton

У меня есть UIButton, который использует собственный шрифт, который устанавливается при загрузке моего представления:

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

Проблема заключается в том, что шрифт появляется в центре центральной линии. Если я прокомментирую эту строку, шрифт по умолчанию выглядит вертикально по центру. Но изменение пользовательского шрифта нарушает вертикальное выравнивание.

Я получаю ту же проблему в ячейке таблицы с пользовательским шрифтом тоже.

Нужно ли мне где-то указывать, что пользовательский шрифт не такой высокий, как другие шрифты?

EDIT: Я только понял, что шрифт, который я использую, является шрифтом Windows TrueType. Я могу использовать его отлично в TextEdit на Mac, только проблема с выравниванием в моем приложении

Button text not vertically centered

Ответы

Ответ 1

Аналогичная проблема обсуждалась на Пользовательский установленный шрифт не отображался корректно в UILabel. Не было никакого решения.

Здесь решение, которое работало на мой пользовательский шрифт, который имел такую ​​же проблему в UILabel, UIButton и тому подобное. Проблема с шрифтом оказалась фактом, что его свойство ascender было слишком мало по сравнению со значением системных шрифтов. 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/

Ответ 2

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

Например: button.contentEdgeInsets = UIEdgeInsetsMake (10.0, 0.0, 0.0, 0.0);

Удачи!

Ответ 4

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

self.searchButton.titleLabel.baselineAdjustment = 
    UIBaselineAdjustmentAlignCenters;

Ответ 5

Вы можете попробовать это в интерфейсе Builder. Вот снимок того, как это сделать -

enter image description hereenter image description here

Как вы можете видеть, что попытка сделать это в IB имеет свои преимущества.

Ответ 6

ПРИМЕЧАНИЕ. Ответ явно лучше, чем этот (тот, что сотнями голосов выше)

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

Полагаю, грязный маленький взлом, но он работает, и это нормально.

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

На самом деле, это не я, это был еще один пост, но я нигде не могу его найти, если я столкнусь с этим снова, я добавлю его в комментарии.