Вертикальное выравнивание пользовательских шрифтов UIButton - PullRequest
113 голосов
/ 24 сентября 2011

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

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

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

У меня возникла та же проблема с ячейкой таблицы с нестандартным шрифтом.

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

РЕДАКТИРОВАТЬ: я только что понял, что шрифт, который я использую, является шрифтом Windows TrueType. Я могу использовать это отлично в TextEdit на Mac, только проблема с выравниванием в моем приложении

Button text not vertically centered

Ответы [ 6 ]

301 голосов
/ 29 ноября 2011

Аналогичная проблема обсуждалась в Неправильно установленный пользовательский шрифт в 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/
48 голосов
/ 20 октября 2011

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

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

Удачи!

6 голосов
/ 21 марта 2014

Я думаю это лучший ответ. не играть с Ascender, NumberOfHMetrics и т. д ... просто импорт-экспорт приложением Glyphs и работа выполнена. Благодаря этому ответу: https://stackoverflow.com/a/16798036/1207684

5 голосов
/ 24 сентября 2011

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

self.searchButton.titleLabel.baselineAdjustment = 
    UIBaselineAdjustmentAlignCenters;
2 голосов
/ 24 сентября 2011

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

enter image description here enter image description here

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

0 голосов
/ 14 октября 2011

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

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

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

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

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

...