简体   繁体   English

如何向我的 CollectionViewCell 添加一些阴影和圆角?

[英]How can I add some SHADOW and ROUNDED CORNERS to my CollectionViewCell?

I am still very new to iOS Programming but currently trying to develop a little app in order to hone in my skills.我对 iOS 编程仍然很陌生,但目前正在尝试开发一个小应用程序以磨练我的技能。 Right now I am having some issues with adding some SHADOW and ROUNDED CORNERS to my CollectionViewCell.现在我在将一些阴影和圆角添加到我的 CollectionViewCell 时遇到了一些问题。

I have the "Main ViewController" and I created a separate file only for the CollectionView Cell which I called "MyCustomCollectionViewCell" which I'll be pasting down here and then will explain where the issues is.我有“主视图控制器”,我只为 CollectionView 单元创建了一个单独的文件,我称之为“MyCustomCollectionViewCell”,我将在这里粘贴,然后解释问题出在哪里。


"Main ViewController": “主视图控制器”:

    import UIKit

class ViewController: UIViewController {
   
  //OUTLETS
   
  @IBOutlet weak var UICollectionView: UICollectionView!
   
  //VARIABLES & CONSTANTS
   
  private let myNames = ["Jesus Urbano", "Juan Antonio", "Diego Armando", "Alejanda Almaguer", "Alma Delia", "Alma Cecilia", "Cristian Rodriguez", "Rene Canales", "Monica Canales", "Angel Canales", "Angel Acevedo", "Claudia Mondragon", "Karen Mondragon", "Efrain Almaguer", "Ester Rivera", "Arleth Almaguer"]
   
  override func viewDidLoad() {
    super.viewDidLoad()
     
    UICollectionView.dataSource = self
     
    UICollectionView.register(UINib(nibName: "MyCustomCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "mycell")
     
  }

}


// MARK: - UICollectionViewDataSource

extension ViewController: UICollectionViewDataSource {
   
  func numberOfSections(in collectionView: UICollectionView) -> Int {
    return 1
  }

  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
     
    return myNames.count
  }

  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
   
  let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "mycell", for: indexPath) as? MyCustomCollectionViewCell
     
  cell?.layer.cornerRadius = 8
  cell?.layer.masksToBounds = false
  cell?.layer.shadowColor = UIColor.black.cgColor
  cell?.layer.shadowOffset = CGSize(width: 5.0, height: 5.0)
  cell?.layer.shadowOpacity = 0.5
  cell?.layer.shadowRadius = 1.0

     
  cell?.myOcupationLabel.text = "Albañil"
  cell?.mySpecialtyLabel.text = "Pisos y Acabados"
  cell?.myNameLabel.text = myNames[indexPath.row]

    return cell!

"MyCustomCollectionViewCell": “MyCustomCollectionViewCell”:

import UIKit

class MyCustomCollectionViewCell: UICollectionViewCell {
   
  //IMAGENES
   
  @IBOutlet weak var myImage: UIImageView!
   
  //ETIQUETAS
   
  @IBOutlet weak var myOcupationLabel: UILabel!
  @IBOutlet weak var mySpecialtyLabel: UILabel!
  @IBOutlet weak var myNameLabel: UILabel!
  
  //BOTONES
  @IBOutlet weak var myContactButton: UIButton!
   
   
  override func awakeFromNib() {
    super.awakeFromNib()
     
     
    //PROPIEDADES
       
    // Etiqueta de Nombre
    
    myNameLabel.font = UIFont.boldSystemFont(ofSize: 15)
     
    // Boton de Contacto
     
    myContactButton.layer.cornerRadius = 18
    myContactButton.layer.masksToBounds = false
    clipsToBounds = true
     
    myContactButton.layer.shadowColor = UIColor.darkGray.cgColor
    myContactButton.layer.shadowRadius = 3
    myContactButton.layer.shadowOpacity = 1.0
    myContactButton.layer.shadowOffset = CGSize(width: 0, height: 3)
     
  }

}

As I mentioned earlier, I am trying to round the corners of my CollectionView Cell and add some shadow to it.正如我之前提到的,我正在尝试将 CollectionView Cell 的角弄圆并为其添加一些阴影。 The problem is, every time I can either get the corners rounded or the shadow, but not both at the same time.问题是,每次我都可以得到圆角或阴影,但不能同时得到。

When I only use this line of code, I can get the corners as I want.当我只使用这行代码时,我可以随心所欲地得到角落。

cell?.layer.cornerRadius = 8单元格?.layer.cornerRadius = 8

On the other hand, if I use the whole block, I only get the shadow, with no rounded corners.另一方面,如果我使用整个块,我只会得到阴影,没有圆角。

 cell?.layer.cornerRadius = 8
 cell?.layer.masksToBounds = false
 cell?.layer.shadowColor = UIColor.black.cgColor
 cell?.layer.shadowOffset = CGSize(width: 5.0, height: 5.0)
 cell?.layer.shadowOpacity = 0.5
 cell?.layer.shadowRadius = 1.0

Do you guys know why is it happening?你们知道为什么会这样吗?

Thank you in advance!先感谢您!

Instead of trying to round the corners of the UICollectionViewCell self, but you need to change the properties of the contentView of the cell.而不是试图圆角UICollectionViewCell自我,但您需要更改单元格的contentView的属性。 Make sure to check the backgroundColor of the cell and the contentView .确保检查单元格的backgroundColorcontentView

You can do this as follows ( taken from here ):您可以按以下方式执行此操作(取自此处):

contentView.layer.cornerRadius = 8.0
contentView.layer.borderWidth = 1.0
contentView.layer.borderColor = UIColor.clear.cgColor
contentView.layer.masksToBounds = true

and

layer.shadowColor = UIColor.black.cgColor
layer.shadowOffset = CGSize(width: 5.0, height: 5.0)
layer.shadowRadius = 1.0
layer.shadowOpacity = 0.5
layer.masksToBounds = false
layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: contentView.layer.cornerRadius).cgPath
layer.backgroundColor = UIColor.clear.cgColor

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM