【问题标题】:Modifying layer properties for contents of collection view cell修改集合视图单元格内容的图层属性
【发布时间】:2015-07-31 19:56:08
【问题描述】:

修改 UIImageView 的 layer 属性时,我的结果好坏参半。在UICollectionView 中,我有UICollectionViewCells,其中有一个UIImageView。我希望这些图像看起来像圆圈,因此,在我的 UICollectionViewCell 子类中,我覆盖了 layoutSubviews 并将我的代码放在那里,如下所示:

override func layoutSubviews() {
  super.layoutSubviews()
  image.layer.cornerRadius = CGRectGetWidth(image.bounds) / 2
  image.layer.masksToBounds = true
}

但是,我得到了不可靠的结果。有时,图像是完美的圆形(如预期的那样),但有时它们是带有圆形边缘的正方形,如果您滚动浏览collectionView,它们可能会或可能不会变成圆形。

放置这段代码的最佳位置在哪里?

【问题讨论】:

    标签: ios swift uiimageview uicollectionview


    【解决方案1】:

    这取决于图像的大小。您需要有方形图像才能使用cornerRadius 创建圆圈。您可以通过设置图像的宽度约束然后将纵横比设置为 1:1 来实现此目的。

    【讨论】:

    • 我问的是把这段代码放在哪里,而不是找到正确的 cornerRadius 值。
    • 如果没有得到完美的圆圈,请不要感到惊讶。 layoutSubviews 应该用于调整布局,以防自动布局或自动调整大小不够。但是您需要更改 cornerRadius 每次要显示您的单元格以根据图像的宽度重新计算半径,所以在这种情况下,我将使用 collectionView(_:willDisplayCell:forItemAtIndexPath:) 和您的 UICollectionViewCell 子类中的一些辅助方法图层设置,这样您就不会弄乱控制器。
    最近更新 更多