Rozważ, że mam następujący tekst w UILabel
(długiej linii tekstu dynamicznego):
Ponieważ armia obcych znacznie przewyższa liczebnie drużynę, gracze muszą wykorzystać postapokaliptyczny świat na swoją korzyść, na przykład szukając schronienia za śmietnikami, słupami, samochodami, gruzami i innymi przedmiotami.
Chcę zmienić rozmiar UILabel's
wysokości, aby tekst mógł się zmieścić. Korzystam z następujących właściwości, UILabel
aby utworzyć tekst do zawijania.
myUILabel.lineBreakMode = UILineBreakModeWordWrap;
myUILabel.numberOfLines = 0;
Daj mi znać, jeśli nie zmierzam w dobrym kierunku. Dzięki.
ios
cocoa-touch
uikit
uilabel
Mustafa
źródło
źródło
Odpowiedzi:
sizeWithFont constrainedToSize:lineBreakMode:
jest metodą do użycia. Przykład jego użycia znajduje się poniżej:źródło
[label sizeToFit]
.sizeWithFont
jest to przestarzałe w iOS 7. stackoverflow.com/questions/18897896/...Idziesz w dobrym kierunku. Wszystko, co musisz zrobić, to:
źródło
W systemie iOS 6 firma Apple dodała właściwość do UILabel, która znacznie upraszcza dynamiczne zmiany rozmiaru etykiet w pionie: preferowane MaxLayoutWidth .
Korzystanie z tej właściwości w połączeniu z lineBreakMode = NSLineBreakByWordWrapping i metodą sizeToFit pozwala na łatwą zmianę rozmiaru instancji UILabel do wysokości, która pomieści cały tekst.
Cytat z dokumentacji iOS:
Próbka:
źródło
Sprawdź tę pracę idealnie bez dodawania pojedynczej linii kodu. (Korzystanie z autolayout)
Zrobiłem dla ciebie demo zgodnie z twoimi wymaganiami. Pobierz go z poniższego linku,
Autoresize UIView i UILabel
Przewodnik krok po kroku: -
Krok 1: - Ustaw ograniczenie na UIView
1) Główny 2) Top 3) Końcowy (z widoku głównego)
Krok 2: - Ustaw ograniczenie na etykietę 1
1) Prowadzenie 2) Top 3) Końcowe (z jego superwizji)
Krok 3: - Ustaw ograniczenie na etykietę 2
1) Prowadzenie 2) Końcowe (z jego podglądu)
Krok 4: - Najbardziej podchwytliwe jest podanie UILabel z UIView.
Krok 5: - (Opcjonalnie) Ustaw ograniczenie na UIButton
1) Prowadzenie 2) Dół 3) Spływ 4) Stała wysokość (z widoku głównego)
Wynik :-
Uwaga: - Upewnij się, że ustawiłeś Liczba linii = 0 we właściwości Label.
Mam nadzieję, że te informacje wystarczą, aby zrozumieć funkcję Uoresview z funkcją Autoresize zgodnie z wysokością UILabel i UILabel z funkcją Autoresize według tekstu.
źródło
Zamiast robić to programowo, możesz to zrobić w Storyboard / XIB podczas projektowania.
źródło
Dzięki chłopaki za pomoc, oto kod, który wypróbowałem i który działa dla mnie
źródło
Rozwiązanie dla iOS7 wcześniejszego i iOS7 powyżej
źródło
Ponieważ sizeWithFont jest przestarzałe, używam go zamiast tego.
ten otrzymuje atrybuty specyficzne dla etykiety.
źródło
Oto wersja kategorii:
UILabel + AutoSize.h #import
UILabel + AutoSize.m
źródło
Możesz zaimplementować
TableViewController's
(UITableViewCell *)tableView:cellForRowAtIndexPath
metodę w następujący sposób (na przykład):Również użyć
NSString
„ssizeWithFont:constrainedToSize:lineBreakMode:
metody, aby obliczyć wysokość tekstu jest.źródło
Rozszerzenie UILabel oparte na tej odpowiedzi dla Swift 4 i nowszych
Może być używany jak:
źródło
A dla tych, którzy migrują do iOS 8, oto rozszerzenie klasy dla Swift:
źródło
Najłatwiejszym i lepszym sposobem, który działał dla mnie, było zastosowanie ograniczenia wysokości do etykiety i ustawienie priorytetu na niski , tj. (250) w serii ujęć.
Więc nie musisz się martwić o programowe obliczanie wysokości i szerokości dzięki scenorysowi.
źródło
Moje podejście do obliczania dynamicznej wysokości UILabel.
Zawiń do funkcji:
źródło
Zaktualizowana metoda
źródło
To jest jeden wiersz kodu, aby uzyskać wysokość UILabel za pomocą Objective-c:
i używając .height otrzymasz wysokość etykiety w następujący sposób:
źródło
Możesz uzyskać wysokość, używając poniższego kodu
Musisz zdać
tekst 2. czcionka 3. szerokość etykiety
źródło
Dzięki za ten post. Bardzo mi pomogło. W moim przypadku edytuję również tekst w osobnym kontrolerze widoku. Zauważyłem, że kiedy używam:
w tableView: cellForRowAtIndexPath: metoda polegająca na tym, że widok etykiety był stale renderowany w górnej części poprzedniego widoku za każdym razem, gdy edytowałem komórkę. Tekst został podzielony na piksele, a gdy coś zostało usunięte lub zmienione, poprzednia wersja była widoczna w nowej wersji. Oto jak rozwiązałem problem:
Nigdy więcej dziwnych warstw. Jeśli istnieje lepszy sposób na poradzenie sobie z tym, proszę dać mi znać.
źródło
użyj tego tutaj wszystkie właściwości są używane na etykiecie i przetestuj go, zwiększając tekst w itemTitle.text as
pokaże odpowiedź perfetc, jak potrzebujesz
źródło
Możesz również użyć go jako metody. @Pyjamasam jest bardzo prawdziwe, więc właśnie tworzę tę metodę. Może być pomocny dla kogoś innego
i po prostu ustaw to w ten sposób
źródło
Aby to zrobić w Swift3, następujący kod:
źródło
Dodanie do powyższych odpowiedzi:
Można to łatwo osiągnąć za pomocą scenorysu.
źródło
Jedna linia mówi, że odpowiedź Chrisa jest błędna.
Powinien być
Poza tym jest to prawidłowe rozwiązanie.
źródło
Wreszcie zadziałało. Dzięki chłopaki.
Nie działałem, ponieważ próbowałem zmienić rozmiar etykiety w
heightForRowAtIndexPath
metodzie:i (tak głupie ja) zmieniłem rozmiar etykiety na domyślną w
cellForRowAtIndexPath
metodzie - przeoczyłem kod, który napisałem wcześniej:źródło
źródło
źródło
Mój kod:
źródło
Ta metoda da idealną wysokość
źródło
Swift 2:
Interesujące linie są
sizeToFit()
w połączeniu z ustawieniemframe.size.height
na maksimum float, da to miejsce na długi tekst, alesizeToFit()
zmusi go do używania tylko niezbędnych, ale ZAWSZE wywołuje go po ustawieniu.frame.size.height
.Zalecam ustawienie
.backgroundColor
dla celów debugowania, w ten sposób można wyświetlić ramkę renderowaną dla każdej sprawy.źródło
yourLabel.frame.height
to nieruchomość typu get onlyUstaw ograniczenia dla UILable w serii ujęć, w tym u góry po lewej u dołu po prawej
źródło