2011-09-13 13 views
6

Ustawiam ramkę UILabels na podstawie wartości zwracanej przez UIFont sizeWithFont, ale z jakiegoś powodu, gdy używam czcionki niestandardowej, zwracane wartości zawierają niektóre wypełnienia, jak widać poniżej.Dlaczego rozmiar UIFont sizeWithFont zawiera puste miejsce w obliczeniach?

Gdy używam boldSystemFontOfSize tekst jest pionowo w środku (co jest to, co chcę), ale gdy używam fontWithName I skończyć z wyściółką pod tekstem. Każdy powód, dla którego sizeWithFont dodaje dopełnienie?

enter image description here

Herezje mój kod ...

CGRect frameLabel = label.frame; 
CGSize sizeLabel = [label.text sizeWithFont:label.font]; 
frameLabel.size.width = sizeLabel.width; 
frameLabel.size.height = sizeLabel.height; 
[label setBackgroundColor:[UIColor redColor]]; 

** Edycja **

mogę obliczyć górną i dolną wyściółkę przy użyciu tego kodu i dostosować etykiety frame.origin .y, aby wyśrodkować moją etykietę w pionie, gdzie musi być

float topPadding = [label.font ascender] - [label.font capHeight]; 
float bottomPadding = [label.font lineHeight] - [label.font ascender]; 
+0

Czy to możliwe, że czcionki używam "Gotham" inclu po tej wyściółce i musiałbym edytować czcionkę? – AlBeebe

Odpowiedz

3

Czcionka jest jedyną możliwą przyczyną tego dopełnienia, ale jeśli potrzebujesz tylko etykiet jednoliniowych, nie trać czasu na edycję czcionki, po prostu zmniejsz wysokość etykiety o te kilka pikseli po ustawieniu odpowiedniej ramki, wykonując coś takiego to:

label.frame = CGRectInset(label.frame, 0, bottomPadding); 

Ponadto, zamiast:

CGRect frameLabel = label.frame; 
CGSize sizeLabel = [label.text sizeWithFont:label.font]; 
frameLabel.size.width = sizeLabel.width; 
frameLabel.size.height = sizeLabel.height; 

Możesz po prostu zadzwonić:

[label sizeToFit]; 
+0

Potwierdziłeś moje podejrzenia. Czy z ciekawości masz pojęcie, jaka właściwość czcionki powoduje dodatkowe dopełnienie u dołu? – AlBeebe

+0

Po prostu potwierdziło 100%, że to faktyczna czcionka powoduje problem, jak powiedziałeś. Pobrałem FontForge i zmieniłem każde ustawienie gotham.ttf, aby pasowało do tego, co ma Helvetica.ttf i udało mi się je usunąć, aby usunąć dodatkowe dopełnienie. – AlBeebe

+0

Cześć AlBeebe. Mam ten sam problem i próbuję zmienić niektóre właściwości czcionki za pomocą FontForge. Czy możesz mi wyjaśnić, jakie wartości zmieniłeś? Wielkie dzięki! – LocoMike

Powiązane problemy