UILabel - Wordwrap text


150

Czy istnieje sposób, aby w razie potrzeby zawinąć tekst na etykiecie? Mam podziały wierszy ustawione na zawijanie wierszy, a etykieta jest wystarczająco wysoka na dwa wiersze, ale wygląda na to, że będzie zawijała się tylko przy podziałach wiersza. Czy muszę dodawać znaki końca wiersza, aby zawijały się prawidłowo? Po prostu chcę, żeby się owinął, jeśli nie może zmieścić się w poziomie.

Odpowiedzi:


301

Jeśli ustawisz numberOfLinesna 0 (i etykieta na zawijanie słów), etykieta zostanie automatycznie zawijana i wykorzysta tyle wierszy, ile potrzeba.

Jeśli edytujesz UILabelw IB, możesz wprowadzić wiele wierszy tekstu, naciskając option+, return aby uzyskać podział wiersza - returnsamodzielnie zakończy edycję.


124
Dla wyjaśnienia dla noobów takich jak ja, wyglądałoby to następująco: cell.textLabel.numberOfLines = 0; cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
Brian Moeskau

46
W iOS 6 i nowszych wersjach NSLineBreakByWordWrappingnie używaj UILineBreakModeWordWrap.
Aaron Brager

3
Możesz również potrzebować następujących informacji: label.autoresizingMask = UIViewAutoresizingFasticHeight;
William Grand,

6
label.lineBreakMode = .ByWordWrappingi label.numberOfLines = 0szybko
AFraser

9
Dla każdego, dla kogo nie było to oczywiste (jak ja): UILabel musi mieć jakieś ograniczenie szerokości (wynikające z rzeczywistego ograniczenia szerokości lub ograniczeń marginesu); w przeciwnym razie się nie zawinie.
jcady

27

UILabelma właściwość lineBreakMode, którą możesz ustawić zgodnie z wymaganiami.


11
„Mam podziały wierszy ustawione na zawijanie wyrazów”. To zawija się tylko w rzeczywistych przerwach między wierszami, nie przerywa się automatycznie, gdy jest zbyt długie.
Codezy

19

W Swift zrobiłbyś to tak:

    label.lineBreakMode = NSLineBreakMode.ByWordWrapping
    label.numberOfLines = 0

(Zwróć uwagę, że sposób działania stałej lineBreakMode jest inny niż w ObjC)


Chcesz wyjaśnić, czym to się różni?
Mike

Myślę, że chodziło mi o to, że nazewnictwo jest inne. Prawdopodobnie zmieniło się to ponownie w swift3
Nathan

Domyślnym trybem łamania wiersza powinno być zawijanie słów
MobileMon

@MobileMonin z mojego doświadczenia, że ​​nie zawsze tak jest. Może IB zmienia to w pewnych okolicznościach?
Nathan

label.lineBreakMode = NSLineBreakByWordWrapping in Obj C
Nupur Sharma

2

Xcode 10, Swift 4

Zawijanie tekstu dla etykiety można również wykonać w serii ujęć, wybierając etykietę i używając Inspektora atrybutów.

Wiersze = 0 Podział wiersza = Zawijanie słów

wprowadź opis obrazu tutaj


2
Używając etykiety branBrand-New, dodając ją bezpośrednio do widoku, nadal generuje to dla mnie jednowierszową etykietę (o szerokości większej niż szerokość telefonu), pomimo ustawienia linii na 0 i podziału linii na Zawijanie słów. Czy jest potrzebne inne ustawienie? Czy muszę dołączyć dodatkowy kod?
phihag
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.