2014-12-02 15 views
9

Ho un UIButton che scarica la sua immagine dalla rete, voglio che la modalità del contenuto di essere "aspetto di riempimento", così ho fatto questo:Impostazione ContentMode a AspectFill su ImageView di UIButton non funziona con le immagini più piccole

btn.imageView.contentMode = UIViewContentModeScaleAspectFill; 

poi ho semplicemente chiamare:

[btn setImage:image forState:UIControlStateNormal]; 

E questo funziona per le immagini sono più grandi di quelle del pulsante. Sono ridimensionati per adattarsi al pulsante con proporzioni invariate. Ma per le immagini che sono più piccole del pulsante, vengono semplicemente visualizzate al centro senza essere allungate.

Per risolvere questo problema, ho provato a creare un'immagine ridimensionabile con l'immagine che ho recuperato, quindi chiamare setImage:forState: sul mio pulsante, ma questo non ha funzionato.

Così alla fine devo dover disegnare manualmente un'immagine ridimensionata per ogni immagine che è più piccola del mio pulsante, quindi utilizzando l'immagine disegnata per il mio pulsante, ma non mi piace questa soluzione.

Quindi la mia domanda è: come posso ottenere immagini più piccole ridimensionate correttamente sul mio pulsante senza dover disegnare manualmente un'immagine ridimensionata per quello ogni volta?

+0

ho modificato la risposta si prega di controllare ... –

risposta

24

Ho avuto lo stesso problema. Prova questo:

[btn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentFill]; 
    [btn setContentVerticalAlignment:UIControlContentVerticalAlignmentFill]; 

Dalla mia comprensione, quando si imposta l'immagine, del pulsante di UIImageView dimensioni/fotogrammi è impostata su quello dell'immagine, in modo da quando è piccolo, non è vincolato dal telaio del UIButton, e quindi si siede felicemente, invariato, nel mezzo del pulsante.

Per risolvere questo problema, è necessario forzare UIImageView a prendere le dimensioni dell'intero UIButton e impostarne l'allineamento si occupa di questo.

Vedere per maggiori informazioni (anche se si riferisce a questo come un problema layout automatico): https://stackoverflow.com/a/28205566/3692828

+2

Perfetto, esattamente la risposta giusta! – axl411

+0

Grazie. Funziona. – Kit

+0

Non ha funzionato per me. In Ipad IOS 10 sto cercando di impostare l'immagine su UIbutton. Il pulsante misura 150 x 150 e l'immagine è più grande di quella. Quando provo a impostare l'immagine su di esso, Prende l'angolo in alto a sinistra dell'immagine –

0

Prova questa:
1. ereditare da UIButton
2. layoutSubviews di override metodo, in questo modo:

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    self.imageView.frame = self.bounds; 
} 
Problemi correlati