Dodałem jedną etykietę do mojego pliku nib, a następnie wymagane jest wyrównanie do lewej górnej części tej etykiety. Ponieważ dostarczam tekst w czasie wykonywania, więc nie jest pewien, ile jest tam wierszy. Jeśli więc tekst zawiera tylko jedną linię, jest wyświetlany jako wyrównany do środka w pionie. To wyrównanie nie pasuje do mojej odpowiedniej etykiety przed nim.
Na przykład:
Co wygląda dziwnie :(
Czy istnieje sposób, w jaki mogę ustawić tekst etykiety na wyrównanie od góry do lewej?
Odpowiedzi:
Zamiast ponownego wyjaśniania, podam link do tego dość obszernego i wysoko ocenianego pytania / odpowiedzi:
Wyrównaj tekst w pionie do góry w UILabel
Krótka odpowiedź brzmi: nie, Apple nie ułatwiło tego, ale jest to możliwe dzięki zmianie rozmiaru ramki.
źródło
To dość łatwe. Utwórz
UILabel
podklapę zverticalAlignment
właściwością i nadpisz ją,textRectForBounds:limitedToNumberOfLines
aby zwrócić prawidłowe granice dla górnego, środkowego lub dolnego wyrównania w pionie. Oto kod:SOLabel.h
SOLabel.m
źródło
bounds.size.width
zamiastrect.size.width
intextRectForBounds:limitedToNumberOfLines:
wydaje się to naprawiać.Znalazłem rozwiązanie wykorzystujące AutoLayout w StoryBoard.
1) Ustaw liczbę wierszy na 0 i wyrównanie tekstu do lewej.
2) Ustaw ograniczenie wysokości.
3) Ograniczenie wysokości powinno być w relacji - mniejsze niż lub równe
4)
Wynik otrzymałem następująco:
źródło
viewWillLayoutSubviews
w kontrolerze czy w pliku komórki? Jeśli kontroler, w jaki sposób uzyskuje dostęp do UILabel z komórki?SOLabel działa dla mnie.
Swift 3 i 5:
Ta wersja została zaktualizowana w stosunku do oryginału, aby umożliwić obsługę języków RTL:
Swift 1:
źródło
W moim przypadku była to
bottom space
kwestia ograniczeń. Ustawiłem to= 16
.Kiedy ustawiłem to
bottom to >= 16
, problem został rozwiązany.Ponadto, jeśli masz jakiekolwiek ograniczenie wysokości na etykiecie, musisz je usunąć.
Oto widok ograniczeń mojej etykiety w Inspektorze rozmiaru:
źródło
W twoim kodzie
Uważaj, jeśli użyjesz tego w komórkach tabeli lub innych widokach, które zostaną odtworzone z różnymi danymi, musisz gdzieś przechowywać oryginalną ramkę i zresetować ją przed wywołaniem sizeToFit.
źródło
Znalazłem inne rozwiązanie tego samego problemu. Użyłem
UITextView
zamiastUILabel
i przełączyłemeditable()
funkcję nafalse
.źródło
Miałem również ten problem, ale odkryłem, że kolejność, w której ustawiasz właściwości i metody UILabel, ma znaczenie!
Jeśli zadzwonisz
[label sizeToFit]
wcześniej,label.font = [UIFont fontWithName:@"Helvetica" size:14];
tekst nie zostanie wyrównany do góry, ale jeśli zmienisz je, to tak!Zauważyłem też, że ustawienie tekstu w pierwszej kolejności też robi różnicę.
Mam nadzieję że to pomoże.
źródło
Korzystając z konstruktora interfejsu, ustaw ograniczenia dla swojej etykiety (pamiętaj, aby ustawić również wysokość i szerokość). Następnie w Inspektorze rozmiaru sprawdź wysokość etykiety. Tam chcesz, aby czytał> = zamiast =. Następnie w implementacji dla tego kontrolera widoku ustaw liczbę wierszy na 0 (można to również zrobić w IB) i ustaw etykietę [label sizeToFit]; a wraz ze wzrostem długości tekstu etykieta będzie rosła i utrzymywał tekst w lewym górnym rogu.
źródło
Jeśli potrzebujesz nieedytowalnego tekstu, który domyślnie zaczyna się w lewym górnym rogu, możesz po prostu użyć widoku tekstu zamiast etykiety, a następnie ustawić jego stan na nieedytowalny, na przykład:
O wiele łatwiejsze niż majstrowanie przy etykietach ...
Twoje zdrowie!
źródło
Rozwiązanie z SoLabel działa, dzięki.
Poniżej dodałem wersję monotouch:
źródło
Najprostszym i najłatwiejszym sposobem jest osadzenie etykiety w StackView i ustawienie osi StackView na poziomą, wyrównanie do góry w inspektorze atrybutów ze scenorysu, jak pokazano tutaj .
źródło
Opierając się na niesamowitej odpowiedzi totiG, stworzyłem klasę IBDesignable, która niezwykle ułatwia dostosowanie pionowego wyrównania UILabel bezpośrednio z StoryBoard. Po prostu upewnij się, że ustawiłeś klasę UILabel na „VerticalAlignLabel” z inspektora tożsamości StoryBoard. Jeśli wyrównanie w pionie nie działa, przejdź do Edytor-> Odśwież wszystkie widoki, co powinno załatwić sprawę.
Jak to działa: Po prawidłowym ustawieniu klasy UILabel scenorys powinien pokazać pole wejściowe, które przyjmuje liczbę całkowitą (kod wyrównania).
Aktualizacja: Dodałem obsługę wyśrodkowanych etykiet ~ Sev
Wprowadź 0 dla wyrównania do góry
Wprowadź 1 dla wyrównania do środka
Wprowadź 2 w polu Wyrównanie do dołu
źródło
możesz także po prostu zmienić UILabel na UITextView, ponieważ zasadniczo robią to samo, z wyjątkiem zalet UITextView jest to, że tekst jest automatycznie wyrównany do lewego górnego rogu
źródło
Mam ten problem, ale moja etykieta była w UITableViewCell, aw funduszu najłatwiejszym sposobem rozwiązania problemu było utworzenie pustego UIView i ustawienie w nim etykiety z ograniczeniami tylko na górze i na lewej stronie, przy wyłączonej klątwie ustaw liczbę linii na 0
źródło
W przypadku iOS 7 to właśnie zrobiłem i pracowałem dla mnie
źródło
Swift 2.0 :: Korzystanie z rozszerzenia UILabel
Utwórz stałe wartości wyliczenia w pustym pliku Swift.
Korzystanie z rozszerzenia UILabel:
Utwórz pustą klasę Swift i nazwij ją. Dodaj następujące elementy.
Stosowanie :
źródło
sampleLabel: UILabel?
?Wersja Swift 3 odpowiedzi @ totiG
źródło
Odpowiedź @ totiG jest poprawna i rozwiązała mój problem. Ale napotkałem problem podczas implementacji tej metody, w mniejszych urządzeniach, takich jak 5s, SE, to nie działa dla mnie. Mam do zbioru
label.sizeToFit()
woverride func layoutSubViews()
źródło
Szybki 5
To proste, kolejność właściwości jest wszystkim.
źródło
Jak ustawić wyrównanie do lewego górnego rogu dla aplikacji UILabel na iOS? Etykieta Ustaw tryb treści na „Lewy górny” działa dla mnie, bardzo dziękuję:
źródło