另一个集合视图中集合视图单元格的约束

Posted

技术标签:

【中文标题】另一个集合视图中集合视图单元格的约束【英文标题】:constraints of collection view cells inside another collectionview 【发布时间】:2018-12-30 16:11:42 【问题描述】:

我已经为 UICollectionView 创建了自定义类。我想将另一个 Collection 视图放入第一个类的单元格中。

import UIKit

class ModeCell: UICollectionViewCell 

    override init(frame: CGRect) 
        super.init(frame: frame)
        setupView()
    


    let modeCollection : UICollectionView = 
        let layout = UICollectionViewFlowLayout()
        let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
        collectionView.backgroundColor = .cyan
        collectionView.translatesAutoresizingMaskIntoConstraints = false
        return collectionView
    ()

    func setupView()
        backgroundColor = .red

        addSubview(modeCollection)
                addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:[v0(180)]-20-|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": modeCollection]))

                addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-25-[v0(180)]", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": modeCollection]))

                addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-30-[v0(160)]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": modeCollection]))

                addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-95-[v0]", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": modeCollection]))

    

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

这段代码工作正常,但我想知道是否可以像我在其他项目中使用它们一样使用约束:

modeCollection.centerXAnchor.constraint(equalTo: .centerXAnchor).isActive = true modeCollection.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true modeCollection.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true modeCollection.heightAnchor.constraint(equalToConstant: 49).isActive = true

问题是我的新自定义类中没有“视图”,我也没有任何可参考的东西......

【问题讨论】:

您可以在 UICollectionViewCell 子类的 layoutSubviews() 中执行 setupViews。 @SWAT 在我的父 UICollectionViewController 类中? 【参考方案1】:

您不是为view 创建约束,而是为self 创建约束,这将引用UICollectionViewCell 本身(在您的情况下为ModeCell)。

【讨论】:

以上是关于另一个集合视图中集合视图单元格的约束的主要内容,如果未能解决你的问题,请参考以下文章

向其子视图(即 UILabel)添加约束时,无法保持集合视图单元格的固定大小

集合视图单元格的自动布局行为怪异

检测到约束模糊地建议集合视图单元格的内容视图大小为零的情况

Swift 2.1 - 如何将集合视图单元格的索引行传递给另一个视图控制器

如何通过自动布局设置集合视图单元格大小

在集合单元格中添加背景视图