UiCollectionView单元格动态宽度

时间:2018-02-09 20:24:32

标签: swift dynamic uicollectionview width cell

我有UICollectionView。如何以编程方式设置单元格宽度=标签宽度

我已实施UICollectionViewDelegateFlowLayoutUICollectionViewDataSource

 let musicType = ["Blues", "Klasik Müzik", "Halk Müzikleri", "Hip-hop", "Caz", "Pop", "Rock", " Enstrümantal Müzik", "House", "Rap" , "Slow"]

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

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: customCellIdentifier, for: indexPath as IndexPath) as! CustomCell
        cell.nameLabel.text = musicType[indexPath.item]
        cell.sizeToFit()
        return cell
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        ?????
    }



}

class CustomCell: UICollectionViewCell {
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupView()
    }

    let nameLabel: UILabel = {
       let lbl = UILabel()
        lbl.text = "deneme Tag"
        lbl.translatesAutoresizingMaskIntoConstraints = false
        return lbl
    }()


    func setupView(){
        backgroundColor = UIColor.red
        addSubview(nameLabel)
        addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-10-[v0]-10-|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": nameLabel]))
        addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": nameLabel]))
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }




}

1 个答案:

答案 0 :(得分:1)

您需要获取标签的属性,然后使用给定索引路径的数据创建NSAttributedString。 NSAttributedString有一个size方法,可以告诉你文本应该有多大。

看起来您的标签没有属性且没有数据,所以假设您希望单元格是标签的实际大小,并且填充零:

let text = NSAttributedString(string: "deneme Tag")
return text.size()