快速在 UICollectionViewCell 中的 UIimage 上设置圆角
Posted
技术标签:
【中文标题】快速在 UICollectionViewCell 中的 UIimage 上设置圆角【英文标题】:Set rounded corners on UIimage in UICollectionViewCell in swift 【发布时间】:2017-02-09 12:06:00 【问题描述】:我有一个简单的问题,在谷歌、文档或此处找不到解决方案。
我的视图控制器中有一个 Collectionview。我创建了一个自定义单元,DescriptionCell,其中包含一个 UIImage。我希望这张图片有圆角。但是,我不知道在哪里设置 UIImage 层上的cornerradius。我在单元格的 awakeFromNib 方法、委托方法 CellForRowAtIndexPath 中尝试过,并在单元格中覆盖了 LayoutSubview 但它不起作用。 设置 UIImage 半径的代码应该放在哪里?
要指定,我知道如何创建 UIImage 的圆角。但是如果是Collectionview单元格的子视图,不知道在哪里设置cornerradius。
这是我的 descriptionCell 的代码
class DescriptionCell: UICollectionViewCell
@IBOutlet weak var mImage: UIImageView!
override func awakeFromNib()
//mImage.layer.cornerradius = 5
//Does not work, the image is still square in the cell
在单元格中为RowAtIndePath
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("descriptioncell", forIndexPath: indexPath) as! DescriptionCell
//cell.mImage.layer.cornerradius = 5
//Does not work, the image is still square in the cell
return cell
提前致谢!
【问题讨论】:
Making round corners for a UIImage的可能重复 不,这是不同的。我已经在使用该答案中的代码。我的问题是 UIImage.layer.cornerradius = xxx 放在哪里? 用相关代码更新您的问题。 没有可以添加的特定代码。我的问题很简单:如何在 UICollectionViewCell 中创建一个带有圆角的 UIImage。 @Jell92 至少为您的DescriptionCell
和CellForRowAtIndexPath
添加代码是有意义的。
【参考方案1】:
您是否尝试过将其放在自定义 UICollectionViewCell 的 init 函数中?
override init(frame: CGRect)
super.init(frame: frame)
image.layer.masksToBounds = true
image.layer.cornerRadius = 10
【讨论】:
【参考方案2】:嗯,您正在使用您所说的答案中的部分代码。
另一部分是imageView.clipsToBounds = true
像这样更新你的awakeFromNib
:
override func awakeFromNib()
mImage.layer.cornerRadius = 5
mimage.clipsToBounds = true
要使其成为圆形,您需要将cornerRadius 设置为正方形高度的一半。在您的cellForItemAtIndexPath
中添加以下几行:
cell.layoutIfNeeded()
cell.mImage.layer.cornerRadius = cell.mImage.frame.height/2
更新
为避免layoutSubviews
被调用两次,请在DescriptionCell
类中覆盖layoutSubviews
并将代码放在那里:
override func layoutSubviews()
super.layoutSubviews()
layoutIfNeeded()
mImage.layer.cornerRadius = mImage.frame.height/2
【讨论】:
我认为成功了!然而现在又出现了另一个问题,我希望它是圆形的。我知道代码类似于: mImage.layer.cornerRadius = mImage.frame.width/2 但是当我使用它时它不起作用。图像消失! 在调用awakeFromNib
之后,需要根据框架设置圆角半径。需要在调整单元格大小并设置图像后完成。
感谢您的回答!那到底是什么时候?那我可以用什么方法设置呢?
你可以在cellForItemAtIndexPath
或者willDisplayCell
的单元格上调用一些配置函数
嗯,好吧,但是如果 LayoutIfNeeded() 调用我们的 LayoutSubviews 实现,那不只是递归 - 因为 LayoutSubviews 会调用自己?【参考方案3】:
您还可以创建一个扩展,例如:
extension UIView
func addBorder(color: UIColor, cornerRadius: CGFloat = 10, borderWidth: CGFloat = 1.0)
layer.borderWidth = borderWidth;
layer.borderColor = color.cgColor
layer.cornerRadius = cornerRadius
layer.masksToBounds = true
【讨论】:
以上是关于快速在 UICollectionViewCell 中的 UIimage 上设置圆角的主要内容,如果未能解决你的问题,请参考以下文章
我在 UICollectionViewCell 中遇到选取框标签错误
在 UICollectionViewCell 上设置 .reuseIdentifier
在 UICollectionViewCell 中更新 UITableView