Google、ドキュメント、またはここで解決策を見つけることができないという単純な問題があります。
ビューコントローラーにCollectionviewがあります。 UIImageを含むカスタムセルDescriptionCellを作成しました。この画像の角を丸くしたい。ただし、UIImageレイヤーのコーナー半径をどこに設定するかわかりません。セルの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
}
そして、cellforRowAtIndePath
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
}
前もって感謝します!
さて、あなたはあなたが使用していたと答えたコードの一部を使用しています。他の部分は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
が2回呼び出されないようにするには、layoutSubviews
クラスでDescriptionCell
をオーバーライドし、そこにコードを配置します。
override func layoutSubviews() {
super.layoutSubviews()
layoutIfNeeded()
mImage.layer.cornerRadius = mImage.frame.height/2
}
カスタムUICollectionViewCellのinit関数内に配置してみましたか?
override init(frame: CGRect) {
super.init(frame: frame)
image.layer.masksToBounds = true
image.layer.cornerRadius = 10
}
次のような拡張機能を作成することもできます。
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
}
}