Obliczanie rozmiaru tekstu UILabel
Rysuję
UILabelsprogramowo. Pobierają swoje rozmiary z bazy danych. Więc nie mogę po prostu użyć
sizeToFit. Zaimplementowałem już funkcję, która przerysowuje
UILabelsz podanym współczynnikiem. Więc wszystko, co potrzebuję, to tekst w
UILabelz mojego punktu widzenia, co wymagałoby maksymalnego współczynnika do ponownego narysowania
UILabels.
W końcu muszę zrobić coś takiego:
double ratio = 1.00;
for (UILabel* labels in sec.subviews) { float widthLabel = labels.frame.size.width;
float heightLabel = labels.frame.size.height;
float heightText =//get the text height here
float widthText =//get the text width here
if (widthLabel < widthText) {
ratio = MAX(widthText/widthLabel,ratio);
}
if (heightLabel < heightText) {
ratio = MAX(heightText/heightLabel, ratio);
}
}
//redraw UILabels with the given ratio here
Jak więc mogę uzyskać rozmiar wysokości i szerokości tekstu, skoro niektóre z moich tekstów nie mieszczą się na etykiecie, nie mogę po prostu użyć krawędzi etykiety? Używam Xcode 5 i iOS 7.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
10 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
[NSString sizeWithFont ...]
są przestarzałe w iOS 7. Zamiast tego użyj tego.Widzieć
Zobacz też https://developer.apple.com/do ... hfont
https://developer.apple.com/do ... hfont
.
UPDATE przykład wyjścia boundingRectWithSize
>
Zgodnie z twoim komentarzem wykonałem prosty test. Kod i dane wyjściowe przedstawiono poniżej.
daje to następujący wynik (zauważ, że obramowania zmieniają się zgodnie z oczekiwaniami wraz ze wzrostem rozmiaru czcionki):
Anonimowy użytkownik
Potwierdzenie od:
Objective-C
Swift 4
let size = label.text?.size(withAttributes: [.font: label.font]) ?? .zero
To daje rozmiar. Możesz też porównać każdej etykiety.
Anonimowy użytkownik
Potwierdzenie od:
CGSize textSize = [label intrinsicContentSize];
(Oczywiście działa to poprawnie tylko po ustawieniu tekstu i czcionki etykiety).
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
[UIFont systemFontOFSize: 14]
Jeśli twój ciąg ma dwie linie, zwrócona wysokość prostownika wynosi około 33,4 punktu.Nie popełnij błędu tak jak ja, rzucając go na , ponieważ 33,4 staje się 33, a 33 punkty wysokości etykiety idą z dwóch do jednej linii!
Anonimowy użytkownik
Potwierdzenie od:
jest to , które definiuje maksymalną wartość, jaką może mieć CGRect.
Moim rozwiązaniem tego problemu jest sprawdzenie, czy przekracza, jeśli nie, to tekst zmieści się na etykiecie. Zrobiłem to z pętlami.
Po każdej iteracji rozmiar wysokości i szerokości zwiększa się o 10% ich wartości.
Powodem, dla którego wybrałem 6 jest to, że nie chciałem, aby etykieta była zbyt miękka.
W przypadku rozwiązania, które nie używa pętli:
Gdzie ostatnia pętla jest dowodem na to, że większa czcionka może dać wynik o większym rozmiarze.
Anonimowy użytkownik
Potwierdzenie od:
<pre class="lang-swift prettyprint-override">
Anonimowy użytkownik
Potwierdzenie od:
W ten sposób możemy użyć zarówno szerokości, jak i wysokości.
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Swift 3.0