Używaj \n
tak, jak używasz w swoim ciągu.
Ustaw numberOfLines na 0, aby zezwolić na dowolną liczbę linii.
label.numberOfLines = 0;
Zaktualizuj ramkę etykiety, aby dopasować rozmiar tekstu za pomocą sizeWithFont:
. Jeśli tego nie zrobisz, tekst zostanie wyśrodkowany lub odcięty.
UILabel *label; // set frame to largest size you want
...
CGSize labelSize = [label.text sizeWithFont:label.font
constrainedToSize:label.frame.size
lineBreakMode:label.lineBreakMode];
label.frame = CGRectMake(
label.frame.origin.x, label.frame.origin.y,
label.frame.size.width, labelSize.height);
Aktualizacja: Zastąpienie za przestarzałe
sizeWithFont:constrainedToSize:lineBreakMode:
Odniesienie, zamiennik przestarzałego rozmiaru Z Czołem: w iOS 7?
CGSize labelSize = [label.text sizeWithAttributes:@{NSFontAttributeName:label.font}];
label.frame = CGRectMake(
label.frame.origin.x, label.frame.origin.y,
label.frame.size.width, labelSize.height);
UILabel
nie ma właściwościorigin
norsize
na iOS? Prawdopodobnie powinno byćlabel.frame.origin.x
itd.Użyj return-opcji podczas pisania w małym polu w Konstruktorze interfejsów, aby wstawić znak wiersza (\ n). W atrybutach Etykieta Konstruktora interfejsu ustaw # Linie = 0.
Wybierz etykietę, a następnie zmień właściwość Linie na 0, jak na powyższym obrazku, a następnie użyj \ n w swoim ciągu znaków do podziału linii.
źródło
Jeśli odczytasz ciąg z pliku XML, podział wiersza
\n
w tym ciągu nie będzie działał wUILabel
tekście. The\n
jest analizowany do podziału linii.Oto mała sztuczka, aby rozwiązać ten problem:
Musisz więc zastąpić nieoddzieloną
\n
część łańcucha ciągiem parsowanym\n
na sztywnoNSString
.Oto moje inne ustawienia etykiety:
Najważniejsze jest ustawienie
numberOfLines
na0
(= nieograniczona liczba linii w etykiecie).Nie mam pojęcia, dlaczego Apple zdecydowało się nie analizować
\n
ciągów znaków odczytanych z XML?Mam nadzieję że to pomoże.
źródło
\n
przy pobieraniu ciągów z Parse.com (chyba też stanie się to przy pobieraniu ciągów z innych interfejsów API)W kreatorze interfejsów możesz użyć Ctrl+, Enteraby wstawić
/n
w żądanym miejscu. W ten sposób można zrealizować następującą sytuacjęaaa
aaaaaaa
źródło
Musisz ustawić
numberOfLines
właściwość naUILabel
. Wartość domyślna to 1 , jeśli ustawisz ją na 0 , usuniesz wszystkie ograniczenia.źródło
Ważne, aby zauważyć, że to
\n
(ukośnik odwrotny) zamiast/n
.źródło
W Swift 2.2,> iOS 8
Ustawiłem Linie = 0 na Storyboard, w Inspektorze atrybutów i połączyłem odnośnik do etykiety. Następnie użyj w kontrolerze takiego:
źródło
// Nie zapomnij ustawić numberOfLines na zero
źródło
Po prostu zrób to w ten sposób
źródło
Na Xcode 6 możesz po prostu użyć \ n nawet w ciągu, gdy używasz zawijania słów. To będzie działać. Na przykład:
źródło
Jeśli używasz a
UILabel
, musisz pamiętać, że domyślnym ustawieniem jest 1 linia, więc nie ma znaczenia, ile przerw dodasz (\n
lub\r
), musisz upewnić się, że jest ustawiony na więcej niż jedną linię, aby można było dopuścić do dołączenia więcej linii.Jedną z możliwości jest użycie,
UITextView
które naprawdę jest przeznaczone dla multilinii.Możesz to łatwo osiągnąć w sekcji atrybutu XCode UILabel, zobacz zrzut ekranu:
źródło
Dla tych, którzy chcą łatwego rozwiązania, wykonaj następujące czynności w polu tekstowym Etykieta:
Upewnij się, że linie liczbowe są ustawione na 0.
Alt + Enter
(Alt to twój klawisz opcji)
Twoje zdrowie!
źródło
Po prostu używam
label.numberOfLines = 0;
źródło
W moim przypadku również \ n nie działało, rozwiązałem problem, utrzymując liczbę linii na 0, a także kopiowałem i wklejałem tekst z nową linią na przykład zamiast Hello \ n Świat, który wkleiłem
w kreatorze interfejsów.
źródło
W xCode 11, Swift 5
\n
działa dobrze, wypróbuj poniższy kod:źródło
źródło
Dla wszystkich innych, którzy mogą mieć problemy z
sizeWithFont:constrainedToSize:lineBreakMode:
przełączaniem się na ios8 lub kimkolwiek (metoda jest przestarzała od ios7), dostosowałem swoją wysokość, używającsizeToFit
zamiast tego.źródło
źródło
Zmienianie rozmiarów ramek etykiet wydaje mi się niewłaściwe, szczególnie w przypadku korzystania z autolayout. Zastosowanie metody appendFormat wydaje się bardziej odpowiednie. Oto mój przykład:
źródło
Jeśli ustawisz właściwości UILable z Zwykły na Przypisany ... UILabel będzie przechowywał tekst wielowierszowy bez względu na to, ile akapitów wraz z wysokością i szerokością UILabel są ustawione tak, aby pasowały do obszaru ekranu, w którym chcesz wyświetlić tekst.
źródło
Napotkałem ten sam problem i oto jak go rozwiązałem. Mam nadzieję, że to będzie komuś pomocne.
// Swift 2
// Cel C
// C # (Xamarin.iOS)
źródło