2013-09-22 12 views
14

Ho un oggetto UIImageView configurato con Layout automatico. Ho creato dei vincoli in modo che la vista mantenga una distanza costante dalla sua superview. In formato visivo sarebbe come:Come combinare i vincoli di layout automatico con la proprietà contentMode di UIView

@"V:|-[imageView]-|" 
@"H:|-[imageView]-|" 

Ma vorrebbe anche mantenere le proporzioni dell'immagine sottostante, e così ho assegnato UIViewContentModeScaleAspectFit a contentMode.

ho pensato che tutto stava funzionando bene fino a quando ho impostato il valore cornerRadius del associata CALayer:

self.imageView.layer.cornerRadius = 7; 
self.imageView.layer.maskToBounds = YES; 

Ora, quando la vista dell'immagine viene ridimensionata, per esempio a causa di un cambiamento di orientamento, gli angoli arrotondati vengono persi a seconda delle nuove dimensioni della vista. La ragione è che cornerRadius vale per il UIImageView (struttura a trattini sotto), ma poiché l'immagine sottostante viene anche ridimensionato rispettare contentMode (struttura in asterischi sotto), angoli arrotondati non sono più visibili:

-------------------------- 
|  **********  | 
|  *  *  | 
|  *  *  | 
|  *  *  | 
|  **********  | 
-------------------------- 

Esiste un modo per prevenire questo comportamento?

risposta

0

Un modo rapido per farlo potrebbe essere quello di sottoclasse UIImageView e impostare il raggio dell'angolo in layoutSubviews.

27

come @ jacob-k ha detto, è necessario aggiungere alla sottoclasse di celle layoutSubviews, ma per aggiungere è necessario chiamare layoutIfNeeded prima.

Esempio:

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 
    [self layoutIfNeeded]; 
    imageView.layer.cornerRadius = imageView.frame.size.width/2; 
} 

Se non vuoi chiamare layoutIfNeeded prima, poi applicare tutte le modifiche senza i vostri vincoli impostati.

+1

Grazie ... lavorare come un fascino. lottando per così tanto tempo. –

+0

Questo lavoro per un UITableViewCell solo se si allegano vincoli alla cella tableview e NOT al contentView. (le viste possono ancora essere aggiunte al contentView –

+0

questa è la soluzione se si hanno vincoli complessi per tutte le classi di dimensioni in uitableviewcell – khunshan

Problemi correlati