UIButton custom font vertical alignment
Mam UIButton
, który używa niestandardowej czcionki, która jest ustawiana, gdy mój widok ładuje się:
- (void)viewDidLoad
{
[super viewDidLoad];
self.searchButton.titleLabel.font = [UIFont fontWithName: @"FONTNAME" size: 15.0 ];
}
Problem, który mam jest to, że czcionka wydaje się unosić się od linii środkowej. Jeśli skomentuję tę linię, domyślna czcionka pojawi się pionowo wyśrodkowana. Ale zmiana na czcionkę niestandardową powoduje przerwanie wyrównania pionowego.
Dostaję ten sam problem na komórce tabeli z niestandardową czcionką.
Czy muszę powiedzieć gdzieś w widoku, że niestandardowa czcionka nie jest tak wysoka jak inne czcionki?
EDIT: właśnie zdałem sobie sprawę, że czcionka, której używam, to czcionka Windows TrueType. Mogę go używać w TextEdit na Macu, tylko problem z wyrównaniem w mojej aplikacji
6 answers
Podobny problem został omówiony na niestandardowa zainstalowana czcionka nie wyświetla się poprawnie w UILabel. Nie podano rozwiązania.
Oto rozwiązanie, które działało dla mojej niestandardowej czcionki, która miała ten sam problem w UILabel, UIButton i tym podobne. Problemem z czcionką okazał się fakt, że jej właściwość ascender była zbyt mała w stosunku do wartości czcionek systemowych. Ascender to pionowa Biała spacja nad znakami czcionki. Aby naprawić czcionkę, musisz pobrać Apple Font Tool Suite narzędzia wiersza poleceń. Następnie weź czcionkę i wykonaj następujące czynności:
~$ ftxdumperfuser -t hhea -A d Bold.ttf
To utworzy Bold.hhea.xml
. Otwórz go za pomocą edytora tekstu i zwiększ wartość atrybutu ascender
. Będziesz musiał trochę poeksperymentować, aby dowiedzieć się dokładną wartość, która działa najlepiej dla Ciebie. W moim przypadku zmieniłem go z 750 na 1200. Następnie uruchom narzędzie ponownie za pomocą następującego wiersza poleceń, aby scalić zmiany z powrotem do pliku TTF:
~$ ftxdumperfuser -t hhea -A f Bold.ttf
Następnie wystarczy użyć wynikowego czcionka ttf w aplikacji.
OS X El Capitan
Instalator pakietu Apple Font Tool Suite nie działa już na OSX El Capitan z powodu SIP , ponieważ próbuje zainstalować pliki binarne w chronionym katalogu.
Musisz ręcznie wyodrębnić ftxdumperfuser
. Najpierw skopiuj pkg z dmg do lokalnego katalogu, a następnie rozpakuj OS X Font Tools.pkg
z
~$ xar -xf OS\ X\ Font\ Tools.pkg
Teraz przejdź do folderu fontTools.pkg
z
~$ cd fontTools.pkg/
Wyciąg z
~$ cat Payload | gunzip -dc | cpio -i
Teraz ftxdumperfuser
binarny jest w Twoim bieżącym folderze. Możesz przenieść go do /usr/local/bin/
, aby można go było używać w każdym folderze wewnątrz aplikacji terminalowej z poniższym.
~$ mv ftxdumperfuser /usr/local/bin/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-08 12:55:30
Rozwiązałem problem dostosowując górną treść (nie Tytuł!) inset.
Na przykład: button.contentEdgeInsets = UIEdgeInsetsMake(10.0, 0.0, 0.0, 0.0);
Powodzenia!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-24 09:52:49
Myślę, że to najlepsza odpowiedź. bez zabawy z ascenderem, numerofhmetrics itp... wystarczy zaimportować-wyeksportować za pomocą aplikacji Glify i zrobione. Dzięki tej odpowiedzi: https://stackoverflow.com/a/16798036/1207684
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:41
Nie jestem pewien, czy to pomoże, ponieważ może to zależeć od czcionki, ale może się zdarzyć, że linia bazowa jest nieprawidłowo ustawiona.
self.searchButton.titleLabel.baselineAdjustment =
UIBaselineAdjustmentAlignCenters;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-24 11:31:38
Możesz wypróbować to w Interface Builder. Oto migawka jak to zrobić -
Jak widać próba zrobienia tego w IB ma swoje zalety.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-24 11:22:37
Więc nie ma na to prawdziwej odpowiedzi, poza edycją pliku czcionki. Co nie wiem jak to zrobić i nie miałem czasu, więc po prostu zrobiłem moje zdjęcia węższe, i dostosowałem komórkę, aby wyglądała, jakby była odpowiednio wyrównana.
Trochę brudny hack, ale działa i jest w porządku.
Była to jedyna czcionka, która spowodowała problem, więc problem musi dotyczyć pliku czcionki.
To nie ja to zakończyłem, to był kolejny post SO, ale nie mogę go znaleźć gdziekolwiek, jeśli jeszcze raz się na to natknę to w komentarzach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-14 09:31:39