【问题标题】:UICollectionView cell ignores UICollectionViewDelegateFlowLayout - sizeForItemAtUICollectionView 单元格忽略 UICollectionViewDelegateFlowLayout - sizeForItemAt
【发布时间】:2019-11-14 14:12:30
【问题描述】:

我正在尝试布局我的 collectionViewCell 的大小,以便在每一行中有 7 个单元格(简单吧?)。

cell很简单,只有一个UILabel,上下左右约束为0。

我已经设置了 sizeForItemAt 方法如下,确保我的控制器是 collectionViewDelegateFlowLayout、collectionViewDelegate 和 collectionViewDataSource,以及 collectionview.delegate 和 .datasource = self。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let safeScreenWidth = self.view.frame.size.width - 30

        let width: CGFloat = (safeScreenWidth / 7)
        let height: CGFloat = 40.0

        return CGSize(width: width, height: height)
    }

该方法被正确调用(使用断点和 print() 检查)但是单元格决定完全忽略给定的大小,并输出一个刚好足以包含其标签文本的大小(如果标签的文本为空,则应用因“无效参数不满足:!CGSizeEqualToSize(size, CGSizeZero)”而崩溃。

我尝试设置不同的尺寸,例如宽度 = 200,高度 = 200;但是没有任何变化,正如我所说,单元格总是很小,刚好适合其标签的文本。

一个快速的解决方法是为 cellForItemAt 中的标签设置高度和宽度限制,但我想了解为什么 sizeForItemAt 不起作用。

【问题讨论】:

  • 您是否检查过此方法是否被调用。如果您在故事板中将单元格大小设置为自动,则不会调用此方法。

标签: ios swift uicollectionview uicollectionviewcell uicollectionviewdelegateflowlayout


【解决方案1】:

由于某种原因,自动估计的大小比sizeForItemAt 方法中计算的优先级更高。

尝试将collectionViews Estimate Size设置为None

【讨论】:

  • 半年后,我自己的回答在新项目中帮助了我?检查了 XCode 11.4.1 和 Swift 5
  • 这对我没有帮助!单元格高度不会更新,但 scollview 的 contentSize 会随着单元格的高度值而变高!
猜你喜欢
  • 1970-01-01
  • 2017-10-12
  • 2013-01-07
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
  • 2016-03-24
  • 1970-01-01
相关资源
最近更新 更多