微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

未定义UICollectionView流布局

如何解决未定义UICollectionView流布局

我使用具有其委托和数据源集的流布局来水平滚动UICollectionView。它的高度为50,并使用自动版式固定在我的视图中。不幸的是,它从不显示并且始终会出现以下错误

2020-10-09 21:30:08.687110 + 0100 MyApp [8679:1601772]未定义UICollectionViewFlowLayout的行为,因为: 2020-10-09 21:30:08.687428 + 0100 MyApp [8679:1601772]项的高度必须小于UICollectionView的高度减去部分插图的顶部和底部值,再减去内容插图的顶部和底部值。 2020-10-09 21:30:08.687743 + 0100 MyApp [8679:1601772]请检查委托返回的值。 2020-10-09 21:30:08.688641 + 0100 MyApp [8679:1601772]相关的UICollectionViewFlowLayout实例为,并将其附加到;层= ; contentOffset:{0,0}; contentSize:{1081.6666666666667,90}; AdjustedContentInset:{0,0,0,0}>集合视图布局:。 2020-10-09 21:30:08.688943 + 0100 MyApp [8679:1601772]在UICollectionViewFlowLayoutBreakForInvalidSizes处创建一个符号断点,以在调试器中捕获它。

我注意到这是在说contentSize为{1081.6666666666667,90},但实际上它仅调用numberOfSectionsnumberOfItemsInSection委托方法。其他未调用UICollectionViewDelegateFlowLayout大小调整方法也未调用。为什么会这样,又如何在不实际调用数据源/委托方法的情况下获得contentSize?如果我将自动布局高度从50设置为90,则没有区别。

我的collectionView是在情节提要中设置的。我已经注册了单元格,并设置估计的流布局大小,如下所示:

override func viewDidLoad() {
    super.viewDidLoad()
    collectionView.register(
        UINib(nibName: "VideoClipCell",bundle: nil),forCellWithReuseIdentifier: "VideoClipCell"
    )
    if let flowLayout = self.collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
        flowLayout.estimatedItemSize = CGSize(width: 30,height: 50)
    }
}

这些是数据源/流委托方法

extension EditingViewController : UICollectionViewDataSource {
    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }

    func collectionView(_ collectionView: UICollectionView,numberOfItemsInSection section: Int) -> Int {
        return items.count
    }

    func collectionView(_ collectionView: UICollectionView,cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        guard let cell = collectionView.dequeueReusableCell(
            withReuseIdentifier: "VideoClipCell",for: indexPath) as? VideoClipCell else {
            return UICollectionViewCell()
        }
        return cell
    }
}

extension EditingViewController: UICollectionViewDelegateFlowLayout {
    func collectionView(
        _ collectionView: UICollectionView,layout collectionViewLayout: UICollectionViewLayout,sizeforItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: 100,height: 50)
    }
}

解决方法

您的单元格中有UIImageView吗?这可能就是为什么您获得1081.6666666666667的内容大小的原因。

您可能不需要自动调整大小的单元格,因此请在情节提要中关闭“估计大小”。否则,您的收藏夹视图将不会读取sizeForItemAt内部的内容。

turn estimate size off

,

您可以显示UICollectionView的init函数吗,我想您没有将UICollectionView委托设置为self,并且布局项的大小高度大于90

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。