UICollectionViewCell 的 contentView 背景层覆盖内容

Posted

技术标签:

【中文标题】UICollectionViewCell 的 contentView 背景层覆盖内容【英文标题】:UICollectionViewCell's contentView background layers over the content 【发布时间】:2021-12-28 10:55:11 【问题描述】:

我有一个使用 UICollectionViewCell 的 collectionView

collectionView.register(CustomCell.self, forCellWithReuseIdentifier: CustomCell.identifier)

我正在使用 isSelected 变量来更改所选单元格的背景。

class CategoryCell: UICollectionViewCell 

    override var isSelected: Bool 
        didSet 
            if self.isSelected 
                self.contentView.backgroundColor = UIColor(hexString: "#f0f0f0")
                
             else 
                self.contentView.backgroundColor = UIColor.clear
            
        
    

但是背景颜色会应用到单元格的内容上,如下所示。

ios 13 上不是这样的。我认为它从 ios 14 或 15 开始发生。知道吗?提前谢谢你。


编辑:

class CategoryCell: UICollectionViewCell 

    override init(frame: CGRect) 
        super.init(frame: frame)
        setupViews()
        self.backgroundColor = UIColor.white
    
    
    let myImage: UIImageView = 
        let image = UIImageView()
        image.translatesAutoresizingMaskIntoConstraints = false
        return image
    ()
    
    let myLabel: UILabel = 
        let label = UILabel()
        label.text = "Custom Text"
        label.textAlignment = .center
        label.translatesAutoresizingMaskIntoConstraints = false
        label.minimumScaleFactor = 0.2
        label.adjustsFontSizeToFitWidth = true
        return label
    ()
    
    func setupViews() 
        addSubview(myImage)
        addSubview(myLavel)
        
        /*setup auto layout*/
    
    
    static var identifier: String 
        return String(describing: self)
    
    
    required init?(coder aDecoder: NSCoder) 
        fatalError("init(coder:) has not been implemented")
    
    
    override var isSelected: Bool 
        didSet 
            if self.isSelected 
                self.contentView.backgroundColor = UIColor(hexString: "#f0f0f0")
                
             else 
                self.contentView.backgroundColor = UIColor.clear
            
        
    


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
        let customCell = collectionView.dequeueReusableCell(withReuseIdentifier: CustomCell.identifier, for: indexPath) as! CustomCell

        customCell.myLabel.text = "Pepe"
        customCell.myImage.image = UIImage(named: "pepe")
        return categoryCell
    

        

【问题讨论】:

如何将图像添加到单元格中? 您的图片不在 contentView 中。它在 contentView 之下... 用更多代码更新了帖子 @FahimParkar 哦,解决了。谢谢! 【参考方案1】:

按照 Fahim Parkar 的说法,以下解决了该问题。

        contentView.addSubview(myImage)
        contentView.addSubview(myLavel)

【讨论】:

以上是关于UICollectionViewCell 的 contentView 背景层覆盖内容的主要内容,如果未能解决你的问题,请参考以下文章

自定义UIcollectionViewCell,使用view控制颜色变化

Swift 检测 UICollectionViewCell 是不是被拖到另一个 UICollectionViewCell 之上

在 UICollectionViewCell 中添加模糊

UICollectionViewCell与UIScrollView取消didSelectItemAtIndexPath

UICollectionViewCell 边框/阴影

UICollectionViewCell 上的奇怪边框 - Swift