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.

Codezy
źródło

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ę.

Kendall Helmstetter Gelner
źródło
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.

Greg
źródło
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)

Nathan
źródło
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

Naishta
źródło
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