2012-05-14 13 views
49

Ho difficoltà ad aggiungere il riempimento sinistro su un UIButton. Ho un UIButton con UIControlContentHorizontalAlignmentLeft. Voglio che il testo sia visualizzato sul lato sinistro, ma è troppo a sinistra. quando do il confine, non sembra buono. Vorrei dare un po 'di padding sul testo di 5px come in CSS. Ho cercato su Google la soluzione, ma non riesco a trovarne una in particolare per UIButton. Grazie in anticipo per l'aiuto.Come aggiungere padding a sinistra su un UIButton creato a livello di codice?

+0

Ciao! Per favore considera di selezionare la risposta di @ LucasChwe sotto come quella corretta. Sembra funzionare meglio ... –

risposta

84

titleEdgeInsets i margini ad incasso o sin dall'inizio, per i bordi del rettangolo di disegno titolo tasto.

@property (nonatomic) UIEdgeInsets titleEdgeInsets

discussione Utilizzare questa proprietà per ridimensionare e riposizionare il rettangolo di disegno efficace per il titolo tasto. È possibile specificare un valore diverso per ciascuno dei quattro riquadri (in alto, a sinistra, in basso a destra). Un valore positivo si restringe, o insiemi, che si spostano verso il bordo più vicino al centro del pulsante. Un valore negativo di espande, o supera, quel bordo. Utilizzare la funzione UIEdgeInsetsMake per costruire un valore per questa proprietà. Il valore predefinito è UIEdgeInsetsZero.

Disponibilità Disponibile in iOS 2.0 e versioni successive.

dichiarata in UIButton.h

dare una prova :)

[myButton setTitleEdgeInsets:UIEdgeInsetsMake(0.0, 5.0, 0.0, 0.0)]; 

anche se si sta utilizzando un pulsante personalizzato esiste una cosa come Inserti di contenuto e Insets immagine.

In caso lo abbiate fatto qui cercando Swift. Questa è valida Swift 3.0

myButton.titleEdgeInsets = UIEdgeInsets(top: 0.0, left: 5.0, bottom: 0.0, right: 0.0) 

È possibile impostarlo direttamente. È utile se si desidera utilizzare una o due proprietà.

myButton.titleEdgeInsets.top = 0 
myButton.titleEdgeInsets.left = 5 
myButton.titleEdgeInsets.bottom = 0 
myButton.titleEdgeInsets.right = 0 
+0

Ha funzionato !! Grazie, Ryan. – MissStack

+0

Happy Coding :) –

+0

@VanDuTran Ho anche affrontato un problema, su alcuni pulsanti funziona su alcuni no. Probabilmente a causa di vincoli sui pulsanti, ho creato ogni contrappunto uno per uno per promuovere il vincolo dell'utente e poi per ultimo eliminarli. Alcuni pulsanti funzionano bene ora, ma esistono ancora alcuni problemi con i pulsanti ..... Se già trovi una soluzione, condividi. –

6

Ecco un altro esempio di come risolvere questo:

[self.myButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 

    float padding_button    = 6.0f; 
    UIEdgeInsets titleInsets   = UIEdgeInsetsMake(0.0f, padding_button, 0.0f, -padding_button); 
    UIEdgeInsets contentInsets   = UIEdgeInsetsMake(padding_button, 0.0f, padding_button, 0.0f); 
    CGFloat extraWidthRequiredForTitle = titleInsets.left - titleInsets.right; 
    contentInsets.right += extraWidthRequiredForTitle; 
    [self.myButton setTitleEdgeInsets:titleInsets]; 
    [self.myButton setContentEdgeInsets:contentInsets]; 
    [self.myButton sizeToFit]; 

Anche se il pulsante ha un'immagine che si può semplicemente aggiungere:

[self.myButton setImage:[UIImage imageNamed:@"YourImage.png"] forState:UIControlStateNormal]; 

Buona fortuna!

23

In Xcode 6 È possibile specificare il titolo inserto in IB:

Interface builder edge title inset

+1

Questo è un buon punto, ma ho trovato che usare il context inset è la strada da percorrere. – smileBot

18

Ecco una risposta migliore a:

  • evitare di troncare il titolo tasto
  • titolo
  • evitano si estenda oltre la vista del pulsante
  • fa sì che la cornice del pulsante funzioni bene con un'immagine.

Codice:

// Obj-C 
    CGFloat padding = 10.0f; 
    [myButton setTitleEdgeInsets:UIEdgeInsetsMake(0, padding, 0, -padding)]; 
    [myButton setContentEdgeInsets:UIEdgeInsetsMake(0, 0, 0, padding)]; 

    // Swift 
    let padding: CGFloat = 10.0 
    myButton.titleEdgeInsets = UIEdgeInsets(top: 0.0, left: padding, bottom: 0.0, right: -padding) 
    myButton.contentEdgeInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: padding) 
+3

Versione Swift con riempimento del lato pari: 'let sidePadding: CGFloat = 20.0 titleEdgeInsets = UIEdgeInsets (sopra: 0.0, a sinistra: -sidePadding, in basso: 0.0, a destra: -sidePadding) contentEdgeInsets = UIEdgeInsets (sopra: 0.0, a sinistra: sidePadding , in basso: 0.0, a destra: sidePadding) ' –

+0

Grazie @ArthurClemens –

+0

Ho modificato il suggerimento di @ ArthurClemens –

3
_myButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; 
_myButton.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0); 
14

Messaggio Xcode 8 se si desidera impostarla questi inserti attraverso costruttore di interfaccia (IB), troverete queste impostazioni inserto in ispettore dimensioni, invece di attributi ispettore.

Spero che questo aiuti.

enter image description here

Problemi correlati