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.