Come impostare il titolo di UIButton come allineamento a sinistra?


472

Devo visualizzare l'indirizzo e-mail dal lato sinistro di a UIButton, ma viene posizionato al centro.

C'è un modo per impostare l'allineamento sul lato sinistro di un UIButton?

Questo è il mio codice attuale:

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

Risposte:


1568

Imposta il contenutoHorizontalAlignment:

emailBtn.contentHorizontalAlignment = .left;

Potresti anche voler regolare il contenuto dell'inserzione sinistra, altrimenti il ​​testo toccherà il bordo sinistro:

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

// Swift 3 and up:
emailBtn.contentEdgeInsets = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 0);

44
Tieni presente che puoi anche impostare entrambe queste proprietà da Interface Builder.
— Mihai Damian,

1
quindi era il numero 9000 da parte mia, grazie, risposta utile
— Logica,

6
Siamo troppo pigri per cercare la documentazione. Cosa faremmo senza SO!
— Kedar Paranjape,

3
Mostra che SO è meglio documentato del documento Apple.
— GeneCode

1
UIControlContentHorizontalAlignmentLeadinge UIControlContentHorizontalAlignmentTrailingsono stati aggiunti in iOS 11
— Cal Stephens il

118

È inoltre possibile utilizzare l'interfaccia builder se non si desidera apportare le modifiche al codice. Qui ho lasciato allineare il testo e anche rientrarlo:

UIButton in IB

Non dimenticare che puoi anche allineare un'immagine nel pulsante .:

inserisci qui la descrizione dell'immagine


Questo mi ha aiutato un sacco, non riesco a credere di non aver capito a cosa servissero quei controlli.
— Ethan Parker,

Grazie, mi ha aiutato. Non sono stato in grado di scoprire inserti laterali per il titolo del pulsante senza l'aiuto dell'indicazione della freccia nelle immagini di esempio.
— Ashok,

in xcode 8.2.1 si è spostato in un altro posto, vedi la mia risposta qui sotto
— dang

Come farlo a livello di codice in modo rapido? Voglio allineare l'immagine a destra e il titolo a sinistra ???
— Visal Sambo,

36

In Swift 3+:

button.contentHorizontalAlignment = .left

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

L'uso emailBtn.titleEdgeInsetsè migliore di contentEdgeInsets, nel caso in cui non si desideri modificare l'intera posizione del contenuto all'interno del pulsante.



7

in xcode 8.2.1 nel generatore di interfacce si sposta in:inserisci qui la descrizione dell'immagine


5

C'è un piccolo errore nel codice di @DyingCactus. Ecco la soluzione corretta per aggiungere un UILabel a un UIButton per allineare il testo del pulsante per controllare meglio il 'titolo' del pulsante:

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

Spero che sia di aiuto....

Al


2

Per Swift 2.0:

emailBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Left  

Questo può aiutare se qualcuno ne avesse bisogno.


2

In Swift 5.0 e Xcode 10.2

Hai due modi per avvicinarti

1) Approccio diretto

btn.contentHorizontalAlignment = .left

2) Esempio di SharedClass (scrivi una volta e usa tutti gli articoli)

Questa è la tua classe condivisa (in questo modo accedi a tutte le proprietà dei componenti)

import UIKit

class SharedClass: NSObject {

    static let sharedInstance = SharedClass()

    private override init() {

    }
}

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

Nel tuo ViewController chiama così

button.btnProperties()//This is your button

1

Provare

button.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;

1
Questo ha funzionato per me, contentHorizontalAlignment no, grazie.
— Danfordham,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.