【问题标题】:Corner Radius for UIImageView not working for UICollectionViewCell with dynamic sizeUIImageView 的角半径不适用于具有动态大小的 UICollectionViewCell
【发布时间】:2019-08-08 23:55:47
【问题描述】:

我有一个由 UIImageView 组成的单元格,其高度为单元格大小的 70%,其余 30% 被标签用完。

单元格具有根据设备宽度计算的动态大小。

我确保单元格是正方形的,并且单元格中包含的 UIImageView 的高度和宽度也具有 1:1 的比例

我在 Collection View 的 cellForItem 委托方法中设置 UIImage 的圆角半径

cell.userImage.layer.cornerRadius = cell.userImage.bounds.width / 2
cell.userImage.clipsToBounds = true

那么任何人都可以指出正确的方向,为什么会发生这种情况? 什么时候应该在单元格生命周期中设置 Image 的圆角半径?

如果我为图像视图提供静态尺寸,则不会发生这种情况,但我希望尺寸根据屏幕尺寸是动态的

【问题讨论】:

    标签: swift uicollectionview uiimage uicollectionviewcell


    【解决方案1】:

    嘿,使用这个委托 UICollectionViewDelegateFlowLayout 来设置单元格中每个项目的大小。像下面的东西

        ...
    
        collectionView.delegate = self
    
        ...
    
        // then make your view controller confirm to the UICollectionViewDelegateFlowLayout
        // then overide this method like below 
        public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    
          CGSize(width: MyLayoutConstants.collectionViewItemWidth,
                height: collectionView.frame.height)
        }
    

    这只是我的一个例子。主要思想是使用上面的 delagate。

    【讨论】:

    • 我是用这个方法来设置大小的,但是还是不行。然后我切换到 CompositionalLayout 并没有发生这个问题
    【解决方案2】:

    试试cell.userImage.layer.maskToBounds = true

    最好将 imageView 包装在 UIView 中。然后设置UIView属性bound.size.width/2

    【讨论】:

      【解决方案3】:

      您正在采用“边界”的宽度。尝试获取 cell.userImage 的宽度/高度。

      cell.userImage.layer.cornerRadius = cell.userImage.bounds.width / 2
      

      另外,图片的比例是1:1吗?

      【讨论】:

      • 粘贴到这里是个错误,在我的代码中我正确使用了 UIImageView 的边界......是的,比例是 1:1
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      • 2014-10-20
      相关资源
      最近更新 更多