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];

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);

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


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


13
UIButton *btn;
btn.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;
btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

13

Swift 4+

button.contentHorizontalAlignment = .left
button.contentVerticalAlignment = .top
button.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)

9

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




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


2

W przypadku Swift 2.0:

emailBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Left  

Może to pomóc w razie potrzeby.


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

1

Próbować

button.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;

1
To zadziałało dla mnie, contentHorizontalAlignment nie, dzięki.
danfordham
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.