Czy jest możliwe zmniejszenie odstępu między tekstem, gdy jest on umieszczony w wielu wierszach UILabel
? Możemy ustawić ramkę, rozmiar czcionki i liczbę linii. Chcę zmniejszyć odstęp między dwiema liniami w tej etykiecie.
objective-c
swift
xcode
uilabel
line-spacing
Abhinav
źródło
źródło
UILabel
, a następnie umieść wszystkie etykiety wStackView
. Wreszcie wyregulowaćspacing
odStackView
. Pamiętaj, aby układać je pionowo.Odpowiedzi:
Pomyślałem o dodaniu czegoś nowego do tej odpowiedzi, więc nie czuję się tak źle ... Oto szybka odpowiedź:
„Krótka odpowiedź: nie możesz. Aby zmienić odstępy między wierszami tekstu, musisz podklasować UILabel i rzucić własny drawTextInRect lub utworzyć wiele etykiet.”Zobacz: Ustaw odstępy między wierszami UILabel
To jest naprawdę stara odpowiedź, a inni dodali już nowy i lepszy sposób na poradzenie sobie z tym .. Zobacz aktualne odpowiedzi poniżej.źródło
NSAttributedString
(dostępnego również we właściwościach UILable w kreatorze interfejsów Xcode).NSParagraphStyle
pomocąNSAttributedString
. (Być może będę musiał przeprowadzić więcej testów innych modyfikowalnych właściwości, ale talineSpacing
właściwość pozwala tylko na jej zwiększenie).W Xcode 6 możesz to zrobić w serii ujęć:
źródło
Począwszy od iOS 6 możesz ustawić przypisany ciąg do UILabel. Sprawdź następujące:
źródło
attributedString
Musi byćNSMutableAttributedString
(NIE NSAttributedString)NSMutableAttributedString *attributedString = [NSMutableAttributedString alloc]initWithString:@"sample text"];
lineSpacing
Nieruchomość zNSMutableParagraphStyle
nigdy nie jest ujemny, więc wysokość linii nie może być zredukowana z tym podejściem. Aby odpowiedzieć na pytanie, musisz użyć innej właściwości, patrz @ d.ennis odpowiedź.Przedstawione tutaj rozwiązania nie działały dla mnie. Znalazłem nieco inny sposób na zrobienie tego za pomocą NSAttributeString dla iOS 6:
źródło
Stworzyłem to proste rozszerzenie, które działa dla mnie bardzo dobrze:
Skopiuj to do pliku, abyś mógł użyć go w ten sposób
źródło
lineSpacing
i zapomnisz o ustawieniulineHeightMultiple
?.lineSpacing = 1.4
i zapomnieć o.lineHeightMultiple
...Z interfejsu Builder (Storyboard / XIB):
Programowo:
SWift 4
Korzystanie z rozszerzenia etykiety
Teraz zadzwoń do funkcji rozszerzenia
Lub za pomocą instancji etykiety (wystarczy skopiować i wykonać ten kod, aby zobaczyć wynik)
Szybki 3
źródło
Istnieje teraz alternatywna odpowiedź w iOS 6, która polega na ustawieniu atrybutu atrybutu na etykiecie przy użyciu NSAttributString z odpowiednimi stylami akapitów. Zobacz tę odpowiedź dotyczącą przepełnienia stosu, aby uzyskać szczegółowe informacje na temat wysokości linii za pomocą NSAttributString:
Tekst podstawowy - wysokość linii NSAttributString zrobiona, prawda?
źródło
Oto klasa, która podklasuje UILabel, aby miała właściwość wysokości linii: https://github.com/LemonCake/MSLabel
źródło
W Swift i jako funkcja, inspirowana DarkDust
źródło
Zgodnie z odpowiedzią @ Mike'a kluczowe jest zmniejszenie
lineHeightMultiple
. Przykład poniżej, działa dobrze dla mnie:źródło
SWIFT 3 przydatne rozszerzenie do łatwiejszego ustawiania odstępu między wierszami :)
źródło
Znalazłem sposób, w jaki możesz ustawić rzeczywistą wysokość linii (a nie czynnik), a nawet renderuje na żywo w Konstruktorze interfejsów . Postępuj zgodnie z instrukcjami poniżej. Kod jest napisany w Swift 4 .
Krok # 1: Utwórz plik o nazwie
DesignableLabel.swift
i wstaw następujący kod:Krok # 2: Umieść a
UILabel
w Storyboard / XIB i ustaw jego klasę naDesignableLabel
. Poczekaj na kompilację projektu (kompilacja musi się powieść!).Krok 3: Teraz powinieneś zobaczyć nową właściwość w panelu właściwości o nazwie „Wysokość linii”. Wystarczy ustawić wartość, która ci się podoba i powinieneś natychmiast zobaczyć wyniki!
źródło
Oto podklasa UILabel, która ustawia
lineHeightMultiple
i upewnia się, że wewnętrzna wysokość jest wystarczająco duża, aby nie odcinać tekstu.źródło
W Swift 2.0 ...
Dodaj rozszerzenie:
Teraz ustaw swój UILabel jako atrybut atrybutu Tekst:
Oczywiście dodałem kilka parametrów, których możesz nie potrzebować. Pobaw się - możesz przepisać metodę - szukałem tego na wielu różnych odpowiedziach, więc pomyślałem, że opublikuję całe rozszerzenie, na wypadek, gdyby pomogło to komuś ...
źródło
Swift3 - W rozszerzeniu UITextView lub UILabel dodaj tę funkcję:
Dodałem trochę kodu, aby zachować bieżący przypisany tekst, jeśli już używasz przypisanych ciągów w widoku (zamiast ich nadpisywania).
źródło
Inna odpowiedź ... Jeśli przekazujesz ciąg programowo, musisz przekazać przypisany ciąg zamiast zwykłego ciągu i zmienić jego styl. (IOS10)
źródło
Rozszerzenie Swift 3:
źródło
To powinno pomóc. Następnie możesz przypisać etykietę do tej klasy niestandardowej w serii ujęć i użyć jej parametrów bezpośrednio w właściwościach:
źródło
Rozszerzenie etykiety Swift 4. Tworzenie NSMutableAttributString przed przekazaniem do funkcji, na wypadek, gdyby dla przypisanego tekstu wymagane były dodatkowe atrybuty.
źródło
Ten kod działał dla mnie (na pewno iOS 7 i iOS 8).
źródło
Oto moje rozwiązanie szybko. Podklasa powinna działać zarówno w przypadku atrybutu atrybutText i text, jak i znaków CharacterSpacing + lineSpacing. Zachowuje odstępy, jeśli ustawiony jest nowy ciąg znaków lub atrybut atrybutowany.
źródło
Jako szybkie, brudne, inteligentne i proste obejście:
W przypadku etykiet UILabel, które nie mają wielu linii, można zamiast tego użyć stosu widoków.
Spacing
StackView do żądanej kwotyPamiętaj, aby ułożyć je pionowo . To rozwiązanie działa również w przypadku niestandardowych czcionek.
źródło