UICollectionView单元格中的动态宽度大小问题

时间:2018-10-22 13:37:40

标签: ios uicollectionview swift4 uicollectionviewcell

我根据其中的文本动态设置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)

}

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

enter image description here

请告诉我问题出在哪里?

2 个答案:

答案 0 :(得分:1)

Selfsize集合视图单元格清单:

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

示例:

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

答案 1 :(得分:0)

我看不到我的VPN的图片原因,并且看到您已解决问题,但是,我想添加一些内容。如果您的单元格使用自动布局,并且有约束条件,则也需要计算和更改它们。