Jak ustawić tytuł UIButton jako lewe wyrównanie?

472

Muszę wyświetlić adres e-mail z lewej strony UIButton, ale jest on ustawiony na środku.

Czy jest jakiś sposób, aby ustawić wyrównanie do lewej strony znaku UIButton?

To jest mój obecny kod:

UIButton* emailBtn = [[UIButton alloc] initWithFrame:CGRectMake(5,30,250,height+15)];
emailBtn.backgroundColor = [UIColor clearColor];
[emailBtn setTitle:obj2.customerEmail forState:UIControlStateNormal];
emailBtn.titleLabel.font = [UIFont systemFontOfSize:12.5];
[emailBtn setTitleColor:[[[UIColor alloc]initWithRed:0.121 green:0.472 blue:0.823 alpha:1]autorelease] forState:UIControlStateNormal];
[emailBtn addTarget:self action:@selector(emailAction:) forControlEvents:UIControlEventTouchUpInside];
[elementView addSubview:emailBtn];
[emailBtn release];
Madan Mohan
źródło

Odpowiedzi:

1567

Ustaw contentHorizontalAlignment:

emailBtn.contentHorizontalAlignment = .left;

Możesz także dostosować zawartość pozostawioną we wstawce, w przeciwnym razie tekst dotknie lewej krawędzi:

emailBtn.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);

// Swift 3 and up:
emailBtn.contentEdgeInsets = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 0);
Zwiąż mnie
źródło
44
Pamiętaj, że możesz również ustawić obie te właściwości w Konstruktorze interfejsów.
Mihai Damian
1
więc był to numer 9000 ode mnie, dzięki, przydatna odpowiedź
Logika
6
Jesteśmy zbyt leniwi, aby przeszukiwać dokumentację. Co byśmy zrobili bez SO!
Kedar Paranjape
3
Pokazuje, że SO jest lepiej udokumentowane niż dokument Apple.
GeneCode,
1
UIControlContentHorizontalAlignmentLeadingi UIControlContentHorizontalAlignmentTrailingzostały dodane w iOS 11
Cal Stephens
118

Możesz także użyć konstruktora interfejsów, jeśli nie chcesz dokonywać zmian w kodzie. Tutaj zostawiłem wyrównanie tekstu, a także trochę wcięcie:

UIButton w IB

Nie zapomnij, że możesz również wyrównać obraz w przycisku:

wprowadź opis zdjęcia tutaj

n8tr
źródło
To pomogło mi wydostać się z tony, nie mogę uwierzyć, że nie zdawałem sobie sprawy, po to są te kontrole.
Ethan Parker,
Dzięki, pomogło mi to. Nie udało mi się znaleźć wypustek krawędzi dla tytułu przycisku bez pomocy strzałki wskazanej na przykładowych zdjęciach.
Ashok,
w xcode 8.2.1 przeniósł się w inne miejsce, patrz moja odpowiedź poniżej
diabła
Jak to zrobić programowo szybko? Chcę wyrównać obraz po prawej stronie, a tytuł po lewej stronie ???
Visal Sambo
36

W Swift 3+:

button.contentHorizontalAlignment = .left
Vincent
źródło
13
UIButton *btn;
btn.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;
btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
Bhavik
źródło
13

Swift 4+

button.contentHorizontalAlignment = .left
button.contentVerticalAlignment = .top
button.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
Zaid Pathan
źródło
9

Używanie emailBtn.titleEdgeInsetsjest lepsze niż contentEdgeInsetsw przypadku, gdy nie chcesz zmieniać całej pozycji zawartości przycisku.

Gabriel
źródło
7

w xcode 8.2.1 w kreatorze interfejsów przechodzi do:wprowadź opis zdjęcia tutaj

cholera
źródło
5

W kodzie @DyingCactus jest mały błąd. Oto prawidłowe rozwiązanie, aby dodać UILabel do przycisku UIB, aby wyrównać tekst przycisku, aby lepiej kontrolować tytuł przycisku:

NSString *myLabelText = @"Hello World";
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];

// position in the parent view and set the size of the button
myButton.frame = CGRectMake(myX, myY, myWidth, myHeight); 

CGRect myButtonRect = myButton.bounds;
UILabel *myLabel = [[UILabel alloc] initWithFrame: myButtonRect];   
myLabel.text = myLabelText;
myLabel.backgroundColor = [UIColor clearColor];
myLabel.textColor = [UIColor redColor]; 
myLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:14.0];   
myLabel.textAlignment = UITextAlignmentLeft;

[myButton addSubview:myLabel];
[myLabel release];

Mam nadzieję że to pomoże....

Glin

Al-Noor Ladhani
źródło
2

W przypadku Swift 2.0:

emailBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Left  

Może to pomóc w razie potrzeby.

Suraj Sonawane
źródło
2

W Swift 5.0 i Xcode 10.2

Masz dwa sposoby podejścia

1) Bezpośrednie podejście

btn.contentHorizontalAlignment = .left

2) Przykład SharedClass (napisz raz i użyj każdego produktu)

To jest twoja wspólna klasa (w ten sposób uzyskujesz dostęp do wszystkich właściwości składników)

import UIKit

class SharedClass: NSObject {

    static let sharedInstance = SharedClass()

    private override init() {

    }
}

//UIButton extension
extension UIButton {
    func btnProperties() {
        contentHorizontalAlignment = .left
    }
}

W swoim wywołaniu ViewController tak

button.btnProperties()//This is your button
iOS
źródło
1

Próbować

button.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;
Gev
źródło
1
To zadziałało dla mnie, contentHorizontalAlignment nie, dzięki.
danfordham