【问题标题】:ios swift UICollectionVIew Issue: The behavior of the UICollectionViewFlowLayout is not defined becauseios swift UICollectionVIew 问题:未定义 UICollectionViewFlowLayout 的行为,因为
【发布时间】:2020-03-13 15:03:13
【问题描述】:

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

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

相关的 UICollectionViewFlowLayout 实例是 , 并附加到 ;层 = ;内容偏移:{-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)
    }
}

【问题讨论】:

  • 集合视图重新加载时,每次都会在顶部和底部添加不需要的填充。我正在尝试从过去 2 天开始解决此问题,但无法解决。任何人都可以帮助我吗?提前致谢

标签: ios swift uicollectionview uicollectionviewlayout


【解决方案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) } }

【讨论】:

  • 嘿,感谢您的回复,这是我计算单元格 collectionView.reloadData() cHeightOfCollectionView.constant = collectionView.collectionViewLayout.collectionViewContentSize.height + 24 的行
  • 我的collectionView高度是100,我根据你的代码设置了值但是没有用
猜你喜欢
  • 2016-01-30
  • 2015-12-16
  • 2015-11-11
  • 1970-01-01
  • 2016-03-19
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多