Jak ustawić środek wyrównania tekstu UIButton? Korzystanie z IB


139

Nie mogę ustawić tytułu UIButton używając IB jako środka. Mój tytuł jest wieloliniowy.
Daje jak ten
wprowadź opis obrazu tutaj

Ale ja chcę taką
wprowadź opis obrazu tutaj

Dałem w tym miejsce, ale nie chcę tego robić. Ponieważ w niektórych przypadkach nie jest dokładnie wyrównany i wiem, że istnieje właściwość UILabel do ustawiania wyrównania, ale nie chcę pisać kodu do tego ... chcę tylko ustawić wszystko z IB.

Dzięki


7
Kumar Rathor - spróbuj kodemself.yourButton.titleLabel.textAlignment = UITextAlignmentCenter;
Sagar R. Kothari

1
@Spark Wiem, jak to zrobić za pomocą kodu, ale chciałem ustawić to za pomocą „IB”.
Inder Kumar Rathore

Wiem, chciałbyś to ustawić za pomocą IB. Ale taka własność jest dostępna tylko za pośrednictwem kodu.
Sagar R. Kothari

Jest dostępny za pośrednictwem IB, przypisując go, ale kogo to obchodzi!
Youssef Moawad

Odpowiedzi:


197

Dzięki temu uzyskasz dokładnie to, czego się spodziewałeś:

Cel C:

 [myButton.titleLabel setTextAlignment:UITextAlignmentCenter];

W przypadku iOS 6 lub nowszego to

 [myButton.titleLabel setTextAlignment: NSTextAlignmentCenter];

jak wyjaśniono w odpowiedzi tyler53

Szybki:

myButton.titleLabel?.textAlignment = NSTextAlignment.Center

Swift 4.x i nowsze

myButton.titleLabel?.textAlignment = .center

1
Stało się NSTextAlignment w późniejszych wersjach iOS.
Sullivan

4
ten kod nie działa, najlepszą odpowiedzią jest @joetjahmyButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
Alberto Mier

8
Pytanie wyraźnie wspomina o IB , tak jak w Interface Builder . To nie jest poprawna odpowiedź, ponieważ wymaga kodowania.
SwiftArchitect

1
Swift 4: myButton.titleLabel? .TextAlignment = .center
Lewis Black

Nazwa „Center” została zmieniona na „center”
ModusPwnens

106

Użyj linii:

myButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

Powinno to wyśrodkować zawartość (w poziomie).

A jeśli chcesz ustawić tekst wewnątrz etykiety również na środku, użyj:

[labelOne setTextAlignment:UITextAlignmentCenter];

Jeśli chcesz użyć IB, mam tutaj mały przykład, który jest połączony w XCode 4, ale powinien zawierać wystarczająco dużo szczegółów (pamiętaj również, że na górze tego ekranu właściwości pokazuje zakładkę właściwości. Te same zakładki można znaleźć w XCode 3.x): wprowadź opis obrazu tutaj


1
dzięki ... ale nie chcę tego ustawiać przez IB. :( to moja ostatnia możliwość zrobienia tego ...
Inder Kumar Rathore

1
@Inder Kumar Rathore: Nie ma problemu. Aby ustawić go w IB, należy kliknąć etykietę, a następnie w Inspektorze atrybutów ustawić Wyrównanie na „Środek”. W moim IB (XCode 4) ma 3 ikony pokazujące wyrównanie tekstu. Oczywiście powinieneś wtedy wybrać środkową.
Joetjah

czy możesz przesłać mi zrzut ekranu ... Czy to etykieta przycisku, czy też ściągnąłeś UILabel z biblioteki? Przypuszczam, że nie UILabel Buttona etykietę
Inder Kumar Rathore

@Inder Kumar Rathore: Hej, zobacz zrzut ekranu, który dodałem. Rzeczywiście pomyliłem rodzaj etykiet, których używasz, wciąż myślałem o UILabel zamiast tekstu w UIButton. Zrzut ekranu pokazuje, jak wyrównać od UIButton do IB.
Joetjah

1
Nie pozwolił mi edytować, ale NSTextAlignmentCenter zajął miejsce UITextAlignmentCenter. Jednak mają na myśli dokładnie to samo. developer.apple.com/library/iOS/documentation/UIKit/Reference/…
OC Rickard

89

Rozwiązanie 1

Możesz ustawić ścieżkę klucza w scenorysie

Ustaw tekst na swój wielowierszowy tytuł, np. hello + multiline

Musisz nacisnąć +, aby przenieść tekst do następnego wiersza.

wprowadź opis obrazu tutaj

Następnie dodaj ścieżkę klucza

titleLabel.textAlignmentjak Numberi wartości 1, 1środki NSTextAlignmentCenter
titleLabel.numberOfLinesjak Numberi wartość 0, 0oznacza dowolną liczbę wierszy

wprowadź opis obrazu tutaj

Nie zostanie to odzwierciedlone w IB / Xcode, ale będzie w środku w czasie wykonywania (urządzenie / symulator)

Jeśli chcesz zobaczyć zmiany w Xcode, musisz wykonać następujące czynności: (pamiętaj, że możesz pominąć te kroki)

  1. Podklasuj przycisk UIButton, aby przycisk można było zaprojektować:

    import UIKit
    @IBDesignable class UIDesignableButton: UIButton {}

  2. Przypisz tę możliwą do zaprojektowania podklasę do przycisków, które modyfikujesz:

Pokazuje, jak zmienić klasę przycisku za pomocą Interface Builder

  1. Jeśli zrobisz to dobrze, zobaczysz aktualizację wizualną w IB, gdy stan Designables będzie „aktualny” (co może potrwać kilka sekund):

Porównanie przycisku możliwego do zaprojektowania i domyślnego w programie Interface Builder



Rozwiązanie 2

Jeśli chcesz napisać kod, wykonaj długi proces

1. Utwórz IBOutletdla przycisku 2.
Napisz kod w viewDidLoad

btn.titleLabel.textAlignment = .Center
btn.titleLabel.numberOfLines = 0


Rozwiązanie 3

W nowszej wersji xcode (mój to xcode 6.1) mamy przypisany tytuł własności
Wybierz, Attributeda następnie zaznacz tekst i naciśnij środkową opcję poniżej

PS Tekst nie nadchodził wielowierszowy, dlatego muszę ustawić

btn.titleLabel.numberOfLines = 0

wprowadź opis obrazu tutaj


W przypadku rozwiązania 3 możesz po prostu dodać Line Breaking = Clip, przekształci tekst na multilinię
finx

Rozwiązanie 3 ma problem, przynajmniej z Xcode 11.3.1: kiedy zmieniam tytuł przycisku, to nie działa. kiedy użyłem btn.titleLabel.textAlignment, działa świetnie.
Brian Hong

27

Do UIButton powinieneś użyć: -

[btn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];

16

Dla iOS 8 i Swift

btn.titleLabel.textAlignment = NSTextAlignment.Center

lub

btn.titleLabel.textAlignment = .Center


13

Dla tych z Was, którzy używają teraz systemu iOS 6 lub nowszego, UITextAlignmentCenter został wycofany. Teraz jest to NSTextAlignmentCenter

PRZYKŁAD: mylabel.textAlignment = NSTextAlignmentCenter;Działa doskonale.


12

Dla Swift 4, xcode 9

myButton.contentHorizontalAlignment = .center

Ustawiłem myButton.titleLabel? .NumberOfLines = 0 i spowodowało to wyśrodkowanie etykiety w przycisku, więc próbowałem wymyślić, jak wyrównać tekst do lewej w przycisku i to zadziałało, ustawiając go jednak na .left.
maxcodes

7

Zakładając, że btn odwołuje się do UIButton, aby zmienić napis wielowierszowy tak, aby był wyśrodkowany w poziomie, możesz użyć następującej instrukcji w systemie iOS 6 lub nowszym:

self.btn.titleLabel.textAlignment = NSTextAlignmentCenter;

4

UITextAlignmentCenter jest przestarzałe w iOS6

Zamiast tego możesz użyć tego kodu:

btn.titleLabel.textAlignment=NSTextAlinmentCenter;


Nie ma właściwości dla UIButton callee textAlignment.
Ravi

Nie ma takiej właściwości dla UIButton w iOS
Jayprakash Dubey

Ma na myśli button.titleLabel.textAlignment
OC Rickard



3

Właściwie możesz to zrobić w kreatorze interfejsów.

Powinieneś ustawić Tytuł na „Przypisane”, a następnie wybrać wyrównanie do środka.


Jeśli jest to przypisane, nie możemy ustawić koloru tekstu, czcionki itp. Poprzez Storyboard.
Vineesh TP

3

Spróbuj w ten sposób:

yourButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
yourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

2

Możesz to zrobić z poziomu storyboardu. Wybierz swój przycisk. Ustaw łamanie wiersza „Zawijanie wyrazów”, ustaw tytuł „Zwykły” na „Przypisany”. Wybierz „Wyrównanie do środka”. Ta część jest ważna => Kliknij przycisk ... (Więcej). I wybierz tryb łamania linii na „Zawijanie znaków”.


1

UIButton nie obsługuje funkcji setTextAlignment. Musisz więc skorzystać z setContentHorizontalAlignment, aby wyrównać tekst przycisku

W celach informacyjnych

[buttonName setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.