【问题标题】:Dynamic width size problem in UICollectionView CellUICollectionView Cell中的动态宽度大小问题
【发布时间】:2019-03-26 14:43:42
【问题描述】:

我根据里面的文字动态设置UICollectionView的每个单元格的宽度。问题是大多数时候width 大小是正确的,但有时单元格大小不正确。

这些是我在单元格中显示的字符串

let tabs = ["1st tab", "Second Tab Second", "Third Tab", "4th Tab", "A"]

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    let text = tabs[indexPath.row]

    let font = UIFont.systemFont(ofSize: 21, weight: UIFont.Weight.regular)
    let attributes = font != nil ? [NSAttributedString.Key.font: font] : [:]
    let width = text.size(withAttributes: attributes).width

    return CGSize(width: width + 16+16+16+35, height: self.menuBarColView.frame.height)

}

它正确显示了第一个、第二个、第三个和第五个,但第 4 个单元格的大小错误。这是输出。

请告诉我问题出在哪里?

【问题讨论】:

  • 在返回实际大小之前将 estimatedItemSize 设置为 (1, 1):(collectionView?.collectionViewLayout as? UICollectionViewFlowLayout)?.estimatedItemSize = CGSize(width: 1, height: 1)
  • @MojtabaHosseini 非常感谢。它解决了我的问题。
  • 我写了一个关于它的答案。看看这个。 ;)

标签: ios uicollectionview swift4 uicollectionviewcell


【解决方案1】:

Selfsize 集合视图单元格清单:

  • estimated item size 设置为除.zero 之外的任何值。将其设置为 (1,1) 效果最佳

示例:

(collectionView?.collectionViewLayout as? UICollectionViewFlowLayout)?.estimatedItemSize = CGSize(width: 1, height: 1)
  • 布局单元格内容并检查可扩展内容是否发生变化。
  • 如果您可以在不损失性能的情况下计算它,则返回实际大小
  • 仔细检查以减少重复代码和缓存大小。

如果您的目标是 iOS 10 及更高版本,您可以改用这个:

....estimatedItemSize = UICollectionViewFlowLayout.automaticSize

【讨论】:

    【解决方案2】:

    我看不到我的 VPN 的图片,我看到你解决了这个问题,但是,我想添加一些东西,如果你的单元格使用自动布局并且有约束,你也需要计算和更改它们。

    【讨论】:

      猜你喜欢
      • 2021-09-15
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      相关资源
      最近更新 更多