UICollectionView 水平分页仅在第一页上每行显示 3 个单元格 [英] UICollectionView horizontal paging presenting 3 cells per row on first page only

查看:42
本文介绍了UICollectionView 水平分页仅在第一页上每行显示 3 个单元格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 UICollectionView,我已经实现了水平滚动,但是由于某种原因,当我滚动浏览时,只显示了 3 个单元格(应该有 9 个)

class BusinessPhotosViewController: UICollectionViewController ,UICollectionViewDelegateFlowLayout{让 cellId = "照片"覆盖 func viewDidLoad() {super.viewDidLoad()if let layout = collectionView?.collectionViewLayout as?UICollectionViewFlowLayout {layout.scrollDirection = .horizo​​ntallayout.minimumLineSpacing = 0}collectionView?.register(BusinessPhotoCells.self, forCellWithReuseIdentifier: cellId)collectionView?.contentInset = UIEdgeInsets.init(top: 0, left: 0, bottom: 0, right: 0)collectionView?.scrollIndicatorInsets = UIEdgeInsets.init(top: 0, left: 0, bottom: 0, right: 0)collectionView?.isPagingEnabled = true}覆盖 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection 部分: Int) ->整数{返回 9}func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) ->CGFloat {返回 0}覆盖 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) ->UICollectionViewCell {let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as!商业光电池返回单元格}func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) ->CG尺寸{让宽度 = view.frame.width/3返回CGSize(宽:宽,高:宽)}}

我在另一个名为 BusinessDetailViewController 的 UICollectionViewController 的单元格中展示了这个 BusinessPhotosViewController

class BusinessDetailViewController : UICollectionViewController {覆盖 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) ->UICollectionViewCell {让 scrollCell = collectionView.dequeueReusableCell(withReuseIdentifier: pictureCellId, for: indexPath)让 bizVC = BusinessPhotosViewController(collectionViewLayout: UICollectionViewFlowLayout())scrollCell.addSubview(bizVC.view)bizVC.view.anchor(顶部:scrollCell.topAnchor,左侧:scrollCell.leftAnchor,底部:scrollCell.bottomAnchor,右侧:scrollCell.rightAnchor,paddingTop:0,paddingLeft:0,paddingBottom:0,paddingRight:0,width:scrollCell.frame.width, height: scrollCell.frame.height)返回滚动单元}}

所以我可以看到滚动有效,但我看到的问题是只加载了 3 个单元格(共 9 个)并且视图看起来像这样:

我在

让我知道它是否有效

I have a UICollectionView that I have implemented to scroll horizontally but for some reason when I scroll through there are only 3 cells that are presented (when there should be 9)

class BusinessPhotosViewController: UICollectionViewController ,UICollectionViewDelegateFlowLayout{

    let cellId = "photos"

    override func viewDidLoad() {
        super.viewDidLoad()

        if let layout = collectionView?.collectionViewLayout as? UICollectionViewFlowLayout {
            layout.scrollDirection = .horizontal
            layout.minimumLineSpacing = 0
        }

        collectionView?.register(BusinessPhotoCells.self, forCellWithReuseIdentifier: cellId)
        collectionView?.contentInset = UIEdgeInsets.init(top: 0, left: 0, bottom: 0, right: 0)
        collectionView?.scrollIndicatorInsets = UIEdgeInsets.init(top: 0, left: 0, bottom: 0, right: 0)
        collectionView?.isPagingEnabled = true
    }

    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 9
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
        return 0
    }

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! BusinessPhotoCells

        return cell
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let width = view.frame.width / 3
        return CGSize(width: width, height: width)
    }
}

I present this BusinessPhotosViewController within the cell of ANOTHER UICollectionViewController called BusinessDetailViewController

class BusinessDetailViewController : UICollectionViewController {

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

            let scrollCell = collectionView.dequeueReusableCell(withReuseIdentifier: pictureCellId, for: indexPath)

            let bizVC = BusinessPhotosViewController(collectionViewLayout: UICollectionViewFlowLayout())

            scrollCell.addSubview(bizVC.view)
            bizVC.view.anchor(top: scrollCell.topAnchor, left: scrollCell.leftAnchor, bottom: scrollCell.bottomAnchor, right: scrollCell.rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: scrollCell.frame.width, height: scrollCell.frame.height)

            return scrollCell
    }
} 

So I can see that the scrolling works, but the issue I'm seeing is that only 3 cells are loaded (out of 9) and the view looks something like this:

I've seen these solutions here and here and other but none helped me.

解决方案

I tried your code and I can see all the 9 cells if the size of 9 cell is smaller than the size scroll cell size.

import UIKit

class ViewController: UIViewController{
    override func viewDidLoad() {
        view.backgroundColor = .red;

        view.addSubview(photosContainer);

        photosContainer.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true;
        photosContainer.topAnchor.constraint(equalTo: view.centerYAnchor).isActive = true;
        photosContainer.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true;
        photosContainer.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.4).isActive = true;

        ***let layout = UICollectionViewFlowLayout();
        layout.scrollDirection = .horizontal
        let bizVC = BusinessPhotosViewController(collectionViewLayout: layout)
        bizVC.view.frame = photosContainer.bounds;
        photosContainer.addSubview(bizVC.view)***

    }

    let photosContainer : UIView = {
        let view = UIView();
        view.backgroundColor =  .green;
        view.translatesAutoresizingMaskIntoConstraints  = false;
        return view;
    }();
}

Before adding the view if you set the frame then I can see all the nine cells no matter their size.

Let me know if it works

这篇关于UICollectionView 水平分页仅在第一页上每行显示 3 个单元格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆