2015-08-10 6 views
8

Ich habe UICollectionView mit UIImageView darauf (wie im Bild gezeigt).UIImageView sollte als Kreisansicht statt Diamant in UICollectionView sein

enter image description here

Und ich will es als Kreis Ansicht machen. Aber wenn ich eine Anwendung starte, erscheint sie als Diamant (Bild unten).

enter image description here

In (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { ich Setup als

[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; 

Für Setup-Bild verwendete ich Libs SDWebImage

Und Ich bin sicher, dass corner Wert korrekt (es ist halb so Bild breite). Auch habe ich keine manuellen Änderungen an den Storyboard-Eigenschaften vorgenommen (Position als Auto-Layout). Was habe ich vermisst?

Antwort

7

Ihr Problem ist, dass Zelle kann neu Layout nach cellForItemAtIndexPath: und Größe der Zelle wird danach geändert werden.

Lösungen für Sie: 1) Setzen Sie cell.photo.layer.cornerRadius = cell.photo.bounds.size.width/2; in

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

2) Erstellen von benutzerdefinierten Klasse für Ihre UICollectionCell und layoutSubviews Funktion außer Kraft setzen:

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

Hinzufügen '(void) layoutSubviews' in benutzerdefinierte UICollectionCell funktioniert wie eine Magie. Vielen Dank. – levo4ka

+0

layoutSubviews wird für mich tun. – jayellos

0

Um Ihr Bild zu einem Kreis zu machen, müssen Sie sicherstellen, dass Ihr Rahmen ein perfektes Quadrat ist und einen Eckenradius von mehr oder weniger 60 einstellt. Das funktioniert für mich, hoffe das hilft Ihnen!

+0

was ist, wenn ich größte Bild haben? in meinem Fall habe ich 170x170 Größe, also Radius ist 85 – levo4ka

+0

Mein Fehler, Sie sind richtig für mich die Lösung war in Sicht didWillAppear fügen Sie den Code ein self.imageview.layer.cornerRadius = self.imageview.bounds.size.width/2; [self.imageview.layer setMasksToBounds: YES]; Und stellen Sie sicher, dass in xib das Kontrollkästchen views clipsubviews markiert ist. Ich hoffe, das hilft. –

+0

danke, ja, das funktioniert in UITableView, aber nicht in UICollectionView :( – levo4ka

0

Ihr corner Wert korrekt ist, aber cell.photo.layer.masksToBounds = NO;, die in falsch setzen Sie es auf cell.photo.layer.masksToBounds = YES; und wenn es immer noch nicht funktioniert dann stellen Sie sicher, dass die Höhe und die Breite Ihrer ImageView sollte gleich sein.

3

Das hat mir sehr geholfen.

In-Subklassen von 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 hat den Trick – Adam