UICollectionViewCell 内的圆形 ImageView

Posted

技术标签:

【中文标题】UICollectionViewCell 内的圆形 ImageView【英文标题】:Circle ImageView inside UICollectionViewCell 【发布时间】:2015-12-29 06:44:03 【问题描述】:

2015 年 12 月 29 日更新 所以这显然适用于UICollectionViewCell 类:

- (void)setThumbnailImage:(NSString *)thumbnailImage 
   _thumbnailImage = [thumbnailImage copy];


   self.thumbnailImageView.image = [UIImage imageNamed:thumbnailImage];
   if (self.thumbnailImageView.layer.frame.size.width > 82.0f) 
    self.thumbnailImageView.layer.cornerRadius = self.thumbnailImageView.frame.size.width/6;
   
   else 
    self.thumbnailImageView.layer.cornerRadius = self.thumbnailImageView.frame.size.width/2;
   
   self.thumbnailImageView.clipsToBounds = YES;
   self.thumbnailImageView.layer.borderColor = [UIColor whiteColor].CGColor;
   self.thumbnailImageView.layer.borderWidth = 4.0f;

我不知道为什么 ImageView 框架在刷新后而不是在首次加载时更新。有人可以详细说明吗?

问题

我正在努力获得正确的 ImageView 帧大小,以便我可以将其设为圆形而不是方形。

UICollectionViewController 中,我在- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 中有用于制作ImageView 圆圈cell.thumbnailImageView.layer.cornerRadius = cell.thumbnailImageView.frame.size.width/2; 的代码。

问题是 ImageView 是菱形的,因为框架大小不正确,但是当我上下滚动时,刷新的单元格是圆形的,并且具有假设在情节提要中制作的正确框架大小。

Here is the refreshed CollectionView

这是我在UICollectionViewController中的代码的sn-p

- (void)viewDidLoad 
[super viewDidLoad];
// Do any additional setup after loading the view.
[self setupDKScrollingView];

names = @[@"Joe Smith", @"Veronica Odel", @"Lucas Baze", @"Brian Can", @"Cory Cobler", @"Emily Jenson"];
timeRemaining = @[@"Overdue", @"0 days", @"Past", @"1 month", @"2 days", @"4 days"];
thumbnails = @[@"gray_1",@"gray_1",@"gray_1",@"gray_1",@"gray_1",@"gray_1"];

[self.collectionView reloadData]; 


- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 
return [names count];


- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
return 1;
 

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 

RZEContactsCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ContactCell" forIndexPath:indexPath];

//cell.nameLabel.text = names[indexPath.row];
//cell.timeRemainingLabel.text = timeRemaining[indexPath.row];
cell.thumbnailImageView.image = [UIImage imageNamed:thumbnails[image.row]];
cell.thumbnailImageView.layer.cornerRadius = cell.thumbnailImageView.frame.size.width/2;
cell.thumbnailImageView.layer.borderWidth = 2.0f;
cell.thumbnailImageView.layer.borderColor = [UIColor blackColor].CGColor;
cell.layer.masksToBounds = YES;

cell.backgroundColor = [UIColor blueColor];
cell.layer.cornerRadius = 5.0f;

return cell;

【问题讨论】:

ImageView的高宽一样? 在带有约束的情节提要中,是的。当我尝试 NSLog 时,它给了我默认大小。我相信默认大小是 (120, 240)。 表示高度和宽度不相同。宽度为 120,高度为 240。尽量保持高度和宽度相同,然后重试。 我在故事板中做了。故事板约束为 82x82。但是当我 NSLog 框架时,它给了我 120x240 但是当我上下滚动,重新加载单元格时,它给了我正确的大小,即 82x82。 你能发布你的代码吗? 【参考方案1】:
static NSString *identifier = @"Cell";

CustomCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

cell.collectionImgView.clipsToBounds=YES;
cell.collectionImgView.layer.cornerRadius=cell.collectionImgView.frame.size.width/2;
cell.collectionImgView.image = [UIImage imageNamed:[_photosArr objectAtIndex:indexPath.row]];

return cell;

【讨论】:

【参考方案2】:

您可能无法在每台设备上都获得完美的圆,请尝试将 2.0 更改为针对不同尺寸设备的不同 near by 值。

   
cell.thumbnailImageView.layer.cornerRadius = cell.thumbnailImageView.frame.size.width/2.0;
cell.thumbnailImageView.clipsToBounds = YES;

【讨论】:

以上是关于UICollectionViewCell 内的圆形 ImageView的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionViewCell - 圆形下载图像

Swift:如何将自定义 UICollectionViewCell 设置为圆形?

UICollectionViewCell 内的 UIScrollView 不滚动

关闭 UICollectionViewCell 内的 UITextField 的键盘

UICollectionViewCell 内的 UIImageView 中的角半径

从 uiviewcontroller 操作 uicollectionviewcell 内的 uicollectionview