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.