UIImageView 应该是圆形视图而不是 UICollectionView 中的菱形视图

UIImageView should be as circle view instead of diamond in UICollectionView

我有 UICollectionView 和 UIImageView(如图所示)。

我想把它做成圆形视图。但是,当我 运行 申请时,它显示为菱形(下图)。

(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 中我设置为

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

对于设置图像,我使用了库 SDWebImage

而且 我敢肯定,cornerRadius 值是正确的(它是图像宽度的一半)。此外,我没有对故事板属性进行任何手动更改(位置设置为自动布局)。 我错过了什么?

要使您的图像视图成为圆形,您必须确保框架是完美的正方形并将角半径设置为大约 60。 这对我有用,希望对你有帮助!

你的问题是单元格可以在 cellForItemAtIndexPath: 之后重新布局,并且单元格的大小会在它之后改变。

适合您的解决方案: 1) 将cell.photo.layer.cornerRadius = cell.photo.bounds.size.width / 2;放入

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

2) 为您的 UICollectionCell 创建自定义 class 并覆盖 layoutSubviews 函数:

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

您的 cornerRadius 值是正确的,但是 cell.photo.layer.masksToBounds = NO; 将其设置为 cell.photo.layer.masksToBounds = YES; 是不正确的,如果它仍然不起作用,请确保 ImageView 的高度和宽度应该是一样的。

这对我帮助很大。

在 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];
}