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

Inder Kumar Rathore
źródło
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
@YoussefSami tak, masz rację stackoverflow.com/a/5865500/468724
Inder Kumar Rathore

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
RGML
źródło
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

Joetjah
źródło
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

Inder Kumar Rathore
źródło
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];
Sirji
źródło
16

Dla iOS 8 i Swift

btn.titleLabel.textAlignment = NSTextAlignment.Center

lub

btn.titleLabel.textAlignment = .Center

Eduardo Fiorezi
źródło
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.

tyler53
źródło
12

Dla Swift 4, xcode 9

myButton.contentHorizontalAlignment = .center
Shan Ye
źródło
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;
user1862723
źródło
4

UITextAlignmentCenter jest przestarzałe w iOS6

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

btn.titleLabel.textAlignment=NSTextAlinmentCenter;

vrwim
źródło
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
4

Dla Swift 3.0

btn.titleLabel?.textAlignment = .center
Morten Gustafsson
źródło
4

Dla Swift 4:

@IBAction func myButton(sender: AnyObject) {
    sender.titleLabel?.textAlignment = NSTextAlignment.center
    sender.setTitle("Some centered String", for:UIControlState.normal)
}
Grzegorz R. Kulesza
źródło
użyj jednego znaku „?” w sender.titleLabel? zamiast "??"
Владимир Ковальчук
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.

Aleksandra Daniłowa
źródło
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;
Konstabl
źródło
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”.

Mustafa Karakuş
źródło
1

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

W celach informacyjnych

[buttonName setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
btmanikandan
źródło