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

Posted

技术标签:

【中文标题】UIImageView 应该是圆形视图而不是 UICollectionView 中的菱形【英文标题】:UIImageView should be as circle view instead of diamond in UICollectionView 【发布时间】:2015-08-10 20:27:32 【问题描述】:

我有 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;

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

将 '(void)layoutSubviews' 添加到自定义 UICollectionCell 中,就像魔术一样工作。谢谢。 layoutSubviews 会为我做的。【参考方案2】:

这对我帮助很大。

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

【讨论】:

【参考方案3】:

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

【讨论】:

如果我有最大的图像怎么办?在我的情况下,我有 170x170 大小,所以半径是 85 我的错误,你对我来说是正确的解决方案是在视图中 didWillAppear 添加代码 self.imageview.layer.cornerRadius = self.imageview.bounds.size.width/2; [self.imageview.layer setMasksToBounds:YES];并确保在 xib 中标记了 imageview clipsubviews 复选框。希望对您有所帮助。 谢谢,是的,这适用于 UITableView,但不适用于 UICollectionView :(【参考方案4】:

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

【讨论】:

以上是关于UIImageView 应该是圆形视图而不是 UICollectionView 中的菱形的主要内容,如果未能解决你的问题,请参考以下文章

为什么UIImageview不是完美的圆圈?

使用cornerradius IOS使其圆形时发出相关的UIimageView

如何在 iPhone 上放大/放大/缩放 UIImageView 的某个部分?

UIImageView 在矩形中绘制图像大小而不是图像视图

iOS UIImageView 内存没有在 ARC 上被释放

UIView contentstretch 将圆形更改为椭圆形,而不是药丸形状