2015-04-20 11 views
6

Non sembra che UIButton instrinsicSize e/o sizeToFit tenga conto di un margine sinistro del titolo, o qualcosa è incasinato con le mie aspettative.UIButton dimensionamento errato con l'immagine e il titolo inserto

Per dimostrare, ho due pulsanti di tipo personalizzato in una vista, entrambi con il titolo "Pulsante". Voglio aggiungere un'immagine al pulsante a sinistra di un titolo.

var image = UIImage(named: "circledPlay") 
    image = image?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate) 

    self.button1.setImage(image, forState: UIControlState.Normal) 
    self.button1.invalidateIntrinsicContentSize() 
    self.button1.sizeToFit() 

    self.button2.setImage(image, forState: UIControlState.Normal) 
    self.button2.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0) 
    self.button2.invalidateIntrinsicContentSize() 
    self.button2.sizeToFit() 

Il risultato è il seguente:

screen shot

Nota il secondo pulsante viene troncato.

Quindi la mia domanda sarebbe se qualcuno l'ha visto prima (e si spera abbia una soluzione) o sono confuso e questo si comporta come previsto (e si spera che conosca il modo giusto per farlo)?

+0

È possibile sottoclasse UIButton e sovrascrive intrinsicContentSize. –

risposta

9

Come indicato nella documentazione, per titleEdgeInsets: "Il pulsante non utilizza questa proprietà per determinare intrinsicContentSize e sizeThatFits:". Quindi, impostando il titoloEdgeInsets sposta semplicemente l'etichetta del titolo, ma non influenza la dimensione del pulsante. Se si desidera che il pulsante abbia più riempimento attorno al contenuto, impostare anche contentEdgeInsets. Non penso che sia necessario chiamare sizeToFit o invalidateIntrinsicContentSize (ma non ne sono sicuro).

+0

Sembra quindi che RTFM si applichi, come mi è sfuggito. Non posso dire che penso abbia molto senso se il mondo dell'autolayout sia considerato un comportamento corretto, ma è quello che è. Credo che dovrei aprire un radar con tanto. Grazie. – vagrant

+0

@vagrant, In realtà, penso che abbia senso nel mondo del layout automatico. L'utilizzo di queste 2 proprietà consente di regolare il riempimento attorno al contenuto del pulsante e la posizione del titolo (e dell'immagine) senza dover impostare una larghezza esplicita per il pulsante, in modo che possa ancora espandersi o contrarsi in modo appropriato quando la lunghezza di il titolo cambia. – rdelmar

Problemi correlati