ios swift UICollectionVIew问题:未定义UICollectionViewFlowLayout的行为,因为

时间:2019-11-18 09:16:56

标签: ios swift uicollectionview uicollectionviewlayout

我正在使用流布局的UICollectionView。我已经制作了一个带有水平的自定义UICollectionView。错误-

未定义UICollectionViewFlowLayout的行为,因为: 项目高度必须小于UICollectionView的高度减去该部分可插入的顶部和底部值,再减去内容可插入的顶部和底部值。

相关的UICollectionViewFlowLayout实例为,并附加到;层=; contentOffset:{-8,-8}; contentSize:{0,100}>集合视图布局:。 2019-11-18 11:51:59.017124 + 0530 eVyapaar_Grocery [3964:1811183]在UICollectionViewFlowLayoutBreakForInvalidSizes上创建一个符号断点,以便在调试器中捕获它。

Here is my code:
collectionView.delegate = self
collectionView.dataSource = self
collectionView.register(UINib(nibName: "cellID", bundle: nil), forCellWithReuseIdentifier:"cellID")
collectionView.contentInset = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
collectionView.showsHorizontalScrollIndicator = false
collectionView.isScrollEnabled = true
if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
       layout.scrollDirection = .horizontal
       collectionView!.collectionViewLayout = layout
}

extension ViewController: UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        if collectionView == myCcollectionView {
            var width: CGFloat = 0
            if UIDevice.isIpad {
                width = ((UIScreen.main.bounds.width/6)-6)
            } else {
                width = ((UIScreen.main.bounds.width/3)-6)
            }
            return CGSize(width: width, height: width)
        } 
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 1

    }

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

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
        return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    }
}

1 个答案:

答案 0 :(得分:1)

如错误所述,您的单元格大小必须小于collectionView的高度和宽度减去内容插图,以适合视图内的单元格。由于无法通过提供的代码看到collectionView的大小,因此无法确定答案,但是请尝试减小collectionView单元的大小。 另外请注意,您正在将contentInsets设置在2个不同的位置,

此处:

collectionView.contentInset = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)

在这里:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) }

编辑:尝试给他们这个尺寸:

extension ViewController: UICollectionViewDelegateFlowLayout { func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { if collectionView == myCcollectionView { var width: CGFloat = 0 if UIDevice.isIpad { width = ((collectionView.frame.width/6)-8) } else { width = ((collectionView.frame.width/3)-8) } return CGSize(width: width, height: width) } }