collectionViewCells 到 collectionView 位置 x:0, y:0

Posted

技术标签:

【中文标题】collectionViewCells 到 collectionView 位置 x:0, y:0【英文标题】:collectionViewCells to collectionView position x:0, y:0 【发布时间】:2017-05-13 23:04:45 【问题描述】:

我遇到了一些关于 collectionViewCells 的布局问题。我正在以编程方式应用布局约束,并且 UICollectionViewCells 没有被固定到我的 collectionView 中的 0,0 位置。请参阅随附的屏幕截图以供参考。提前致谢!

class CurrentUserPlaceDetailsVC: UIViewController, UICollectionViewDelegateFlowLayout 

    override func viewDidLoad() 
        super.viewDidLoad()

        setupMenuBar()
    

    let menuBar: MenuBar = 
        let mb = MenuBar()
        return mb
    ()

    private func setupMenuBar() 
        view.addSubview(menuBar)
        view.addConstraintsWithFormat("H:|[v0]|", views: menuBar)
        view.addConstraintsWithFormat("V:|-64-[v0(150)]", views: menuBar)

    
    var placesTableVC: PlacesTableVC?


class MenuBar: UIView, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout 

    lazy var collectionView: UICollectionView = 
        let layout = UICollectionViewFlowLayout()
        let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
        cv.backgroundColor = UIColor.green
        cv.dataSource = self
        cv.delegate = self
        return cv
    ()

    let cellId = "cellId"

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


        collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: cellId)

        addSubview(collectionView)
        addConstraintsWithFormat("H:|[v0]|", views: collectionView)
        addConstraintsWithFormat("V:|[v0]|", views: collectionView)

    

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        return 4
    

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath)
        cell.backgroundColor = .blue
        return cell
    

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




extension UIView 

    func addConstraintsWithFormat(_ format: String, views: UIView...) 
        var viewsDictionary = [String: UIView]()
        for (index, view) in views.enumerated() 
            let key = "v\(index)"
            view.translatesAutoresizingMaskIntoConstraints = false
            viewsDictionary[key] = view
        

        addConstraints(NSLayoutConstraint.constraints(withVisualFormat: format, options: NSLayoutFormatOptions(), metrics: nil, views: viewsDictionary))
    

【问题讨论】:

可能重复***.com/questions/43023384/… 【参考方案1】:

您需要设置用于初始化UICollectionViewUICollectionViewFlowLayout 实例的minimumLineSpacingheaderReferenceSize 和/或sectionInset。也可以设置contentInsetUICollectionView

试试这个:

lazy var collectionView: UICollectionView = 
    let layout = UICollectionViewFlowLayout()
    layout.minimumLineSpacing = 0
    layout.headerReferenceSize = .zero
    layout.sectionInset = .zero
    let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
    cv.backgroundColor = .green
    cv.dataSource = self
    cv.delegate = self
    cv.contentInset = .zero
    return cv
()

【讨论】:

以上是关于collectionViewCells 到 collectionView 位置 x:0, y:0的主要内容,如果未能解决你的问题,请参考以下文章

如何将imageView添加到collectionViewCell中的scrollView

collectionViewCells 到 collectionView 位置 x:0, y:0

使用 PagedView 时如何将 CollectionViewCell 的边缘固定到 CollectionView

过渡到其他collectionviewController时collectionviewCell不会改变

以编程方式添加到 collectionviewcell 时未启用按钮

CollectionViewCell 滚动到错误的位置