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