2015-05-25 8 views
15

Pracuję nad projektem Swift z Storyboard, w którym chcę umieścić tekst w etykiecie. W starej wersji programu Objective-C, w której nie korzystałem ze Storyboard, użyłem następujących ustawień i wszystko działało idealnie.Tekst nieużywany w aplikacji UILabel

Objective-C without Storyboard Settings

Oto ustawienia Swift

Swift with Storyboard Settings

Czytałem o potencjalnych problemach układu auto z preferowanych ustawień szerokości. Obecnie mam ustawione na automatyczny układ, a sama etykieta ma szerokość 560. Dodałem ograniczenie, aby zachować etykietę 20 pikseli od bieżącego podglądu, a gdy myślałem, że to zadziała, nadal nie mogę uzyskać tekstu owinąć. Ustawienia wymiaru znajdują się poniżej.

Label Dimension and Constraints

Może ktoś wyjaśnić, w jaki sposób dostać się do zawijania tekstu?

+0

Mój błąd w sprawie terminologii. Chciałem powiedzieć Storyboardy, a nie Place zabaw. – jonthornham

+0

To jest poprawa, ale pamiętaj też, że nie ma to nic wspólnego ze Swiftem lub Celem-C. Powinieneś usunąć wszystkie odniesienia do języka ze swojego pytania. Jeśli wcześniej nie korzystałeś z storyboardu, kontrast byłby pomiędzy kodem i scenorysami lub między plikiem _.xib_ a scenopisem. – matt

Odpowiedz

48

Po pierwsze, dobra wiadomość: Ustawiono etykietę na 2 wiersze i Zawijanie wierszy. Więc można zawinąć . Doskonały.

Teraz musisz się upewnić, że etykieta jest wystarczająco wysoka. Daj mu ograniczenie wysokości lub nadaj mu wystarczająco duże ograniczenie wysokości, aby mógł pomieścić dwie linie.

Wreszcie, musisz ograniczyć jego szerokość. To właśnie powoduje zawijanie tekstu. Jeśli nie ograniczysz szerokości etykiety, będzie ona nadal rosła w prawo, potencjalnie kontynuując z ekranu. Ograniczenie szerokości etykiety zatrzymuje ten wzrost w prawo i powoduje zawijanie tekstu (a etykieta rośnie w dół).

Możesz ograniczyć szerokość na kilka sposobów. Możesz mieć faktyczne ograniczenia szerokości. Lub możesz mieć wiodące ograniczenie i końcowe ograniczenie, do czegoś stosunkowo nieruchomego, takiego jak superview. I jest trzecia droga: na Inspektorze rozmiaru (który również pokazujesz, w prawym dolnym rogu twojego pytania), ustaw Preferowaną szerokość (jest pokazana u góry Inspektora rozmiarów): jest to szerokość, przy której , wszystkie inne rzeczy są równe, etykieta przestanie rosnąć w prawo, a zamiast tego owinąć i urosnąć.

+0

"Nie ograniczajcie wysokości" - to było to dla mnie! – Siddhartha

+0

"Wreszcie, musisz ograniczyć szerokość" to działało dla mnie. Mój Xib złamał ograniczenie szerokości, które ustawił numer linii na 1. – green0range

1

Tekst zostanie zawinięty, jeśli podałeś numer linii większy niż 1. Jednak możesz nie być w stanie zobaczyć zawijania, jeśli wysokość etykiety nie wystarcza do wyświetlenia zawartości. Proponuję usunąć ograniczenie wysokości lub zwiększyć jego wartość.

+0

Próbowałem tego i nie miałem szczęścia. Niezależnie, dziękuję za wejście. – jonthornham

0

Rozwiązano problem polegający na zmianie typu etykiety na "Element zastępczy" pod Intrinsic Size w IB. Kiedy to zmieniłem, tekst był opakowany, a ostrzeżenia zniknęły.

+2

"Ustawienie rzeczywistego rozmiaru zawartości projektu wpływa tylko na widok podczas edytowania w programie Interface Builder. Widok ten nie będzie miał tego samego rozmiaru zawartości w czasie wykonywania." – static0886

+0

@ static0886 wypróbowałeś tę odpowiedź i okazało się, że się nie udało? Byłoby to dalekie od najdziwniejszej rzeczy, jaką widziałem w Konstruktorze interfejsów, co jest sprzeczne z dokumentacją. – nolanw

0

W przypadku, gdy to pomaga każdemu: zastosowałem się do podanych tu zaleceń, aby naprawić etykietę bez zawijania do dwóch linii, ale nic nie zadziałało. To, co zadziałało, to przede mną usunąłem niektóre istotne ograniczenia w storyboardie (używam automatycznego układu) i zobaczyłem, że etykieta jest prawidłowo zapakowana. Powoli dodałem ograniczenia, których potrzebowałem i wszystko nadal działa dobrze. W związku z tym pomocne może być usunięcie i zmiana twoich ograniczeń.

1

Deklarują swoją UILabel programowo i dać

yourUILabel.contentMode = .scaleToFill 
yourUILabel.numberOfLines = 0 

Ten pracował dla mnie.