2012-04-17 5 views
5

Sto utilizzando un carattere personalizzato per il titolo di un UIButton. Funziona, tranne che con questo tipo di carattere una parte del primo carattere viene ritagliata. Per esempio:Titolo UIButton ritagliato

enter image description here

Ho provato a installare le contentEdgeInsets e titleEdgeInsets e non riesco a ottenere non troncato. Ho anche provato a impostare la proprietà button.titleLabel.clipsToBounds su NO;

Qualsiasi suggerimento sarebbe molto apprezzato.

risposta

8

Quindi ho appena finito di impostare il titolo UIButton su zero e ho aggiunto il mio UILabel come sottoview a UIButton. Ho impostato il frame UILabel alle stesse dimensioni del pulsante e lo ho impostato per essere centrato.

Non è la soluzione più elegante, ne sono sicuro, ma ha portato a termine il lavoro.

+2

Fa davvero schifo che questa sia l'unica soluzione. La ragione per cui ciò accade è che i progettisti di font codificano intenzionalmente i limiti delle loro lettere come meno di quanto non siano in realtà in modo che possano nidificare. Questo è particolarmente importante per i font corsivo e corsivo. Vorrei che Apple non sarebbe stata così "precisa" con il calcolo della larghezza dell'etichetta UIButton, o almeno ci ha permesso di cambiarla noi stessi. Sto registrando un bug report, dovresti farlo anch'io. – Bek

1

Mi sembra che il contenuto sia allineato in modo divertente. Se la cornice dell'etichetta non è direttamente accessibile, utilizzare [button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter]; per provare a correggere il problema dell'allineamento orizzontale.

+0

In realtà è impostato al centro come è. Se lo metto a giusta giustificazione, rimane ritagliato. –

9

Anche se la soluzione di Jeshua funziona bene, non è ottimale per i miei occhi. Preferisco raccomandare di sottoclasse UIButton e sovrascrivere il suo metodo layoutSubviews.

-(void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    CGRect frame = self.titleLabel.frame; 
    frame.size.height = self.bounds.size.height; 
    frame.origin.y = self.titleEdgeInsets.top; 
    self.titleLabel.frame = frame; 
} 
+0

Questo è veramente facile da fare, basta creare una classe (sottoclasse UIButton), copia incolla, assegnare alla classe personalizzata del pulsante. Grazie! –

+0

Questa dovrebbe essere la risposta accettata. Semplice ed elegante. –

+0

perfect Grazie –

0

codice Swift per risposta di cui sopra:

override func layoutSubviews() { 
    super.layoutSubviews() 
    titleLabel?.frame = CGRect(x: bounds.origin.x, y: titleEdgeInsets.top, width: frame.width, height: bounds.size.height) 
}