繁体   English   中英

未定义 UICollectionView 流布局

[英]UICollectionView flow layout not defined

我有一个水平滚动的UICollectionView使用具有其委托和数据源集的流布局。 它的高度为 50,并使用自动布局固定在我的视图中。 不幸的是,它永远不会显示并总是给出以下错误:

2020-10-09 21:30:08.687110+0100 MyApp[8679:1601772] 未定义 UICollectionViewFlowLayout 的行为,因为:2020-10-09 21:30:08.687428+0867428+0867428+086017 项目高度必须为小于 UICollectionView 的高度减去部分插入顶部和底部值,减去内容插入顶部和底部值。 2020-10-09 21:30:08.687743+0100 MyApp[8679:1601772] 请检查委托返回的值。 2020-10-09 21:30:08.688641+0100 MyApp[8679:1601772] 相关的 UICollectionViewFlowLayout 实例是 <UICollectionViewFlowLayout: 0x105dc6350>,并附加到 <UICollectionView61;0x0000 帧 = (0 0; 375 90); clipsToBounds = YES; 自动调整大小 = RM+BM; 手势识别器 = <NSArray: 0x28372ccf0>; 层 = <CALayer: 0x2839465c0>; 内容偏移量:{0, 0}; 内容大小:{1081.6666666666667, 90}; AdjustedContentInset: {0, 0, 0, 0}> 集合视图布局:<UICollectionViewFlowLayout: 0x105dc6350>。 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

关闭估计尺寸

你能显示你的 UICollectionView`s init func,我猜你没有将 UICollectionView 委托设置为 self,并且布局 itemsize 高度大于 90

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM