Mike Sabatini 的答案工作正常,如果您直接在 collectionView cellForItemAt 上配置单元格属性,但如果您尝试在自定义 UICollectionViewCell 子类的 awakeFromNib() 中设置它们,您将在设备上设置错误的 bezierPath 结束'与您之前在 Storyboard (IB) 中设置的宽度和高度不匹配。
我的解决方案是在 UICollectionViewCell 的子类中创建一个 func 并从 cellForItemAt 调用它,如下所示:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellID", for: indexPath) as? CustomCollectionViewCell{
cell.configure())
return cell
}
else {
return UICollectionViewCell()
}
}
在 CustomCollectionViewCell.swift 上:
class CustomCollectionViewCell: UICollectionViewCell{
func configure() {
contentView.layer.cornerRadius = 20
contentView.layer.borderWidth = 1.0
contentView.layer.borderColor = UIColor.clear.cgColor
contentView.layer.masksToBounds = true
layer.shadowColor = UIColor.black.cgColor
layer.shadowOffset = CGSize(width: 0, height: 2.0)
layer.shadowRadius = 2.0
layer.shadowOpacity = 0.5
layer.masksToBounds = false
layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: contentView.layer.cornerRadius).cgPath}
}