Czy jest możliwa automatyczna zmiana rozmiaru pola / granic UILabel w celu dopasowania do zawartego tekstu? (Nie obchodzi mnie, czy skończy się większy niż wyświetlacz)
Więc jeśli użytkownik wpisze „cześć” lub „moje imię jest naprawdę długie, chcę, żeby zmieściło się w tym polu”, nigdy nie jest skracane, a etykieta odpowiednio „poszerzana”?
ios
iphone
objective-c
uilabel
Wayneh
źródło
źródło
Odpowiedzi:
Proszę sprawdzić moją treść, w której utworzyłem kategorię dla
UILabel
czegoś bardzo podobnego, moja kategoria pozwalaUILabel
rozciągnąć jej wysokość, aby wyświetlić całą zawartość: https://gist.github.com/1005520Lub sprawdź ten post: https://stackoverflow.com/a/7242981/662605
Spowoduje to rozciągnięcie wysokości, ale możesz ją łatwo zmienić, aby pracować w drugą stronę i rozciągnąć szerokość za pomocą czegoś takiego, co oznacza, że wierzę, co chcesz zrobić:
Mógłbyś po prostu użyć
sizeToFit
metody dostępnej wUIView
klasie, ale dla bezpieczeństwa ustawić liczbę linii na 1.Aktualizacja iOS 6
Jeśli używasz AutoLayout, masz wbudowane rozwiązanie. Ustawiając liczbę wierszy na 0, platforma odpowiednio zmieni rozmiar etykiety (dodając większą wysokość), aby dopasować ją do tekstu.
Aktualizacja iOS 8
sizeWithFont:
jest przestarzałe, więc użyjsizeWithAttributes:
zamiast tego:źródło
Użycie
[label sizeToFit];
da ten sam wynik z kategorii Daniels.Chociaż zalecam użycie autoukładu i pozwolenie, aby etykieta zmieniła rozmiar w oparciu o ograniczenia.
źródło
Jeśli chcemy,
UILabel
aby zmniejszał się i rozszerzał w zależności od rozmiaru tekstu, najlepszą opcją jest storyboard z automatycznym układem. Poniżej znajdują się kroki, aby to osiągnąćKroki
Umieść UILabel w kontrolerze widoku i umieść go w dowolnym miejscu. Umieszczono również
0
nanumberOfLines
własnośćUILabel
.Daj mu ograniczenie szpilki górnej, wiodącej i końcowej.
Update Frame
i kliknijFix Misplacement
. Teraz ten UILabel zmniejszy się, jeśli tekst jest mniejszy, i rozszerzy, jeśli tekstu jest więcej.źródło
Nie jest to tak skomplikowane, jak czynią to niektóre inne odpowiedzi.
Przypnij lewą i górną krawędź
Po prostu użyj układu automatycznego, aby dodać ograniczenia, aby przypiąć lewą i górną stronę etykiety.
Następnie automatycznie zmieni rozmiar.
Uwagi
Nie ma potrzeby ustawiania
sizeToFit
podczas korzystania z automatycznego układu. Mój pełny kod przykładowego projektu jest tutaj:myLabel.preferredMaxLayoutWidth = 150 // or whatever
kod. (Przypiąłem również przycisk do dołu etykiety, aby przesuwał się w dół, gdy wzrosła wysokość etykiety).UITableViewCell
a, zobacz tę odpowiedź .źródło
Służy
[label sizeToFit];
do dostosowywania tekstu w UILabelźródło
Stworzyłem kilka metod na podstawie powyższej odpowiedzi Daniela.
źródło
Oto, co stwierdzam, że działa w mojej sytuacji:
1) Wysokość UILabel ma ograniczenie> = 0 przy użyciu autolayout. Szerokość jest stała. 2) Przypisz tekst do UILabel, który w tym momencie ma już superview (nie wiem, jak ważne jest to). 3) Następnie wykonaj:
Wysokość etykiety jest teraz odpowiednio ustawiona.
źródło
To jest metoda kategorii. Najpierw musisz ustawić tekst, a następnie wywołać tę metodę, aby dostosować wysokość UILabel.
źródło
Możesz zmienić rozmiar etykiety zgodnie z tekstem i innymi powiązanymi elementami sterującymi na dwa sposoby:
Dla iOS 7.0 i nowszych
przed iOS 7.0 można to wykorzystać do obliczenia rozmiaru etykiety
// przeformułuj inne kontrolki na podstawie labelTextHeight
Jeśli nie chcesz obliczać rozmiaru tekstu etykiety, możesz użyć -sizeToFit na wystąpieniu UILabel as-
// po tym możesz uzyskać ramkę etykiety, aby zmienić ramy innych powiązanych elementów sterujących
źródło
[label sizeToFit];
viewDidLoadźródło
Miałem ogromne problemy z automatycznym układem. Mamy dwa pojemniki wewnątrz komórki tabeli. Rozmiar drugiego kontenera jest zmieniany w zależności od opisu przedmiotu (0 - 1000 znaków), a rozmiar wiersza powinien być zmieniany na podstawie tego.
Brakujący składnik był dolnym ograniczeniem dla opisu.
Zmieniłem dolne ograniczenie elementu dynamicznego z = 0 na > = 0 .
źródło
Pasuje za każdym razem! :)
źródło
możesz wyświetlić jedno wyjście liniowe, a następnie ustawić właściwość Line = 0 i wyświetlić wiele wyjść liniowych, a następnie ustawić właściwość Line = 1 i więcej
źródło
Jest też takie podejście:
źródło
changeTextWithAutoHeight:width:
metodyUILabel
. Czy możesz podać link do miejsca w dokumentacji UIKit, w którym można znaleźć tę metodę.