如何设置 UICollectionViewCell 的内容

Posted

技术标签:

【中文标题】如何设置 UICollectionViewCell 的内容【英文标题】:How to set the content of a UICollectionViewCell 【发布时间】:2020-04-11 18:51:15 【问题描述】:

我正在尝试在集合视图中呈现基本的正方形网格。我知道我想渲染的列数和行数。但是,我无法弄清楚如何以编程方式渲染正方形。

我有一个看起来像这样的视图控制器:

class BoardViewController: UIViewController 

    @IBOutlet weak var board: UICollectionView!

    var game = Game()

    override func viewDidLoad() 
        super.viewDidLoad()

        board.delegate = self
        // Do any additional setup after loading the view.
    



extension BoardViewController: UICollectionViewDelegateFlowLayout 




extension BoardViewController: UICollectionViewDataSource 
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        return game.getColumns() * game.getRows()
    

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 

    


我知道我需要使用 cellForItemAt 方法来呈现自定义单元格。

我还有一个像这样的 CustomView(UIView 的子类):

import UIKit

class CustomView: UIView 

    override init(frame: CGRect)
        super.init(frame: frame)
        self.backgroundColor = UIColor.blue
    

    required init?(coder: NSCoder) 
        super.init(coder: coder)
    

然后是 BoardGridCell 类:

class BoardGridCell: UICollectionViewCell 

    override init(frame: CGRect) 
        super.init(frame: frame)
        self.contentView = CustomView()
    

    required init?(coder: NSCoder) 
        super.init(coder: coder)
    




Apple 文档说:

“要配置你的单元格的外观,在 contentView 属性中将显示数据项内容所需的视图作为子视图添加到视图中。不要直接将子视图添加到单元格本身。单元格管理多层内容,其中内容视图只是其中一个。除了内容视图之外,单元格还管理两个背景视图,以显示单元格处于其选中和未选中状态。"

但是,每当我尝试设置 contentView 属性时,我都会收到“无法分配给属性:'contentView' 是一个只能获取的属性”。

所以我的问题是 - 如何将子视图添加到 contentView 属性?

我对 Swift 很陌生,所以如果有人能为我澄清这一点,我将不胜感激。

谢谢

【问题讨论】:

contentView.addSubview(_instance of your view goes here_) 应该会有所帮助。不要忘记为您的customView提供框架 使用 self.contentView.addSubView(CustomView()) 代替 self.contentView = CustomView() 谢谢大家,马上试试 【参考方案1】:

你设置了物品的大小吗?

在 CollectionViewDelegateFlowLayout 中

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize  
    return CGSize(width: 100, height: 100)

其中值 100 可能是根据您的屏幕尺寸计算得出的数字

【讨论】:

谢谢亚历克斯,这很有帮助

以上是关于如何设置 UICollectionViewCell 的内容的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UICollectionViewCell 上设置 UILabel?

如何设置动态宽度 UICollectionViewCell

如何设置 UICollectionViewCell 大小

如何设置 UICollectionViewCell 的内容

如何将 UICollectionViewCell 高度设置为视图(屏幕)高度的 90%?

Swift:如何将自定义 UICollectionViewCell 设置为圆形?