2009-09-06 14 views
6

Wyobraź sobie UILabel, który ma 200 pikseli szerokości i 50 pikseli wysokości. Etykieta ma tekst wewnątrz, a etykieta powoduje, że tekst jest mniejszy, dzięki czemu pasuje do etykiety. A teraz, skąd wziąłbyś rozmiar tego UFontu, jak jest widoczny na etykiecie? Wyobraźmy sobie, że rozmiar czcionki został podany przy użyciu ogromnej liczby 100, a etykieta zmniejsza ją do 15. A następnie, chcesz utworzyć inne etykiety z małym tekstem, który ma taki sam rozmiar czcionki. Czy istnieje sposób na uzyskanie rozmiaru czcionki UIFont po ściśnięciu przez etykietę?Jak obliczyć rozmiar UIFont, gdy tekst w etykiecie jest ograniczony do szerokości?

Odpowiedz

15

Jeśli przejdzie rozmiar UILabel i breakMode itp do:

CGSize size = [label.text sizeWithFont:label.font minFontSize:10 actualFontSize:&actualFontSize forWidth:200 lineBreakMode:UILineBreakModeTailTruncation]; 

actualFontSize powinno być to, czego szukasz.

AKTUALIZACJA:

Powyższe informacje zostały uznane za przestarzałe. Sposób korzystania teraz jest:

- (CGRect)textRectForBounds:(CGRect)bounds 
    limitedToNumberOfLines:(NSInteger)numberOfLines 

Oto przykład

CGSize size = [label textRectForBounds:label.bounds 
    limitedToNumberOfLines:1].size; 
+0

Więc actualFontSize byłoby CGSize które przechodzą przez odniesienie do tej metody? –

+0

Tak. W C i Obj C funkcja jest ograniczona pod względem zwracania wartości. Argumenty przekazywane do funkcji są obliczane, a ich wartość jest przesyłana na stos przed wywołaniem funkcji. Funkcja pobiera tylko te wartości i nie może przekazywać w nich wartości zwracanej. Dopóki to, co jest pchane, nie jest wskaźnikiem, w którym to przypadku funkcja może użyć wskaźnika do zapisu na jego adres i zmodyfikowania go. Upraszczam - tutaj faktyczna FontSize jest jedną z zwróconych wartości funkcji (metody). – mahboudz

+0

To jest przestarzałe w iOS7. Czy istnieje wymiana iOS8? –

Powiązane problemy