2015-08-10 19 views
8

Ho UICollectionView con UIImageView su di esso (come mostrato nell'immagine).UIImageView dovrebbe essere come vista cerchio anziché diamante in UICollectionView

enter image description here

e voglio farlo come vista cerchio. Ma quando eseguo un'applicazione, appare come un diamante (immagine sotto).

enter image description here

In (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { messa a punto ho come

[cell.photo setImageWithURL:[NSURL URLWithString:url] usingActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 

    cell.photo.layer.cornerRadius = cell.photo.bounds.size.width/2; 
    cell.photo.layer.masksToBounds = NO; 
    cell.photo.clipsToBounds = YES; 

immagine di installazione Per ho usato librerie SDWebImage

E sono sicuro, che il valore cornerRadius è corretto (è la metà di larghezza dell'immagine). Inoltre non ho apportato alcuna modifica manuale nelle proprietà dello storyboard (posizione impostata come layout automatico). Cosa mi sono perso?

risposta

7

Il problema è che la cella può essere riformattata dopo cellForItemAtIndexPath: e la dimensione della cella verrà modificata dopo di essa.

Soluzioni per voi: 1) Inserire cell.photo.layer.cornerRadius = cell.photo.bounds.size.width/2; in

- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath 

2) Creare classe personalizzata per il vostro UICollectionCell e sovrascrivere layoutSubviews funzione:

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

Aggiungendo '(void) layoutSubviews' in UICollectionCell personalizzato che funziona come una magia.Grazie – levo4ka

+0

layoutSubviews farà per me. – jayellos

0

Per fare in modo che l'immagine visualizzi un cerchio, è necessario assicurarsi che la cornice sia perfettamente quadrata e impostare il raggio dell'angolo a più o meno 60. Questo funziona per me spero che questo ti aiuti!

+0

che dire se ho grande immagine? nel mio caso ho 170x170, quindi il raggio è 85 – levo4ka

+0

Errore mio, hai ragione per me la soluzione era in vista didWillAppear aggiungi il codice self.imageview.layer.cornerRadius = self.imageview.bounds.size.width/2; [self.imageview.layer setMasksToBounds: YES]; E assicurati che in xib la casella di controllo pictureseview sia contrassegnata. Spero possa aiutare. –

+0

grazie, sì, questo funziona in UITableView, ma non in UICollectionView :( – levo4ka

0

Il vostro valore cornerRadius è corretto ma cell.photo.layer.masksToBounds = NO; che a errato impostalo su cell.photo.layer.masksToBounds = YES; e, se non funziona ancora, assicurati che l'altezza e la larghezza del tuo ImageView dovrebbe essere lo stesso.

3

Questo mi ha aiutato molto.

In sottoclasse di UICollectionViewCell, CustomCell.m:

-(void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    [self layoutCell]; 
} 

-(void)layoutCell 
{ 
    [self layoutIfNeeded]; 

    [[imgThumbView layer] setCornerRadius:imgThumbView.bounds.size.width/2]; 

    [[imgThumbView layer] setBorderColor:[UIColor redColor]; 

    [[imgThumbView layer] setBorderWidth:1.5f]; 

    [[imgThumbView layer] setMasksToBounds:YES]; 
} 
+0

layoutIfNeeded ha fatto il trucco – Adam