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

Tekst przycisku nie wyśrodkowany pionowo

Author: Bartłomiej Semańczyk, 2011-09-24

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/
 288
Author: kolyuchiy,
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!

 47
Author: Jordi Corominas,
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

 6
Author: dollar2048,
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;
 5
Author: Mats,
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ć -

Tutaj wpisz opis obrazkaTutaj wpisz opis obrazka

Jak widać próba zrobienia tego w IB ma swoje zalety.

 2
Author: Srikar Appalaraju,
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.

 0
Author: Willshaw Media,
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