Mike Sabatiniの答えは正常に機能します。collectionViewcellForItemAtでセルプロパティを直接構成した場合、カスタムUICollectionViewCellサブクラスのawakeFromNib()でセルプロパティを設定しようとすると、デバイスに設定されている誤ったbezierPathで終了します。ストーリーボード(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}
}