【问题标题】:CollectionView AutoResize Label Not WorkingCollectionView 自动调整大小标签不起作用
【发布时间】:2018-12-28 14:50:53
【问题描述】:

我有一个带有标签的垂直集合视图,在我的流程布局中,我使用 UICollectionViewFlowLayoutAutomaticSize 来调整单元格大小,但是当我给标签提供很长的字符串时,它给了我错误,数量label 中的行设置为 0

错误

请检查委托返回的值。 相关

UICollectionViewFlowLayout 实例是 UICollectionViewFlowLayout ,并且 它附加到 UICollectionView;帧 = (0 88; 375 690); clipsToBounds = YES;自动调整大小 = RM+BM;手势识别器 = NSArray 层=CALayer;内容偏移:{0, 0};内容大小:{375, 2}; adjustedContentInset: {0, 0, 0, 0}> 集合视图布局: UICollectionViewFlowLayout

在 UICollectionViewFlowLayoutBreakForInvalidSizes 在 调试器。

未定义 UICollectionViewFlowLayout 的行为,因为 项目宽度必须小于 UICollectionView 的宽度 减去部分插入左右值,减去内容 插入左右值

约束

代码

let array = ["Hello", Array(repeating: "Hello", count: 100).joined(), "blah"]
// on viewDidLoad method
 if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
        flowLayout.estimatedItemSize = CGSize(width: 1, height: 1)
        flowLayout.itemSize = UICollectionViewFlowLayoutAutomaticSize
    }

【问题讨论】:

  • 看看下面的链接,不确定它是否有帮助。 Github。 rnystrom 于 2016 年 10 月 20 日提供了答案

标签: ios swift autolayout collectionview


【解决方案1】:

问题是由于某种原因UICollectionViewFlowLayout 没有设置单元格的最大宽度,并且由于您设置了像您这样的约束,所以会发生一个或多个单元格的width 大于宽度collectionView

这是解决方法,在UICollectionViewCell 子类内的标签中添加width 约束,并将其设置为equal,而不是less than equal

接下来为该约束创建一个出口,以便稍后进行设置。

然后在 CollectionViewDataSource cellForItemAtIndexPath 中,您可以将宽度常量设置为小于 CollectionView 宽度减去您添加的填充(在我的情况下,标签的左右填充为 20 + 20)。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "reuse", for: indexPath) as! CollectionViewCell

    cell.widthConstraint.constant = collectionView.bounds.size.width - 40
    //line above sets maximum width of label to be maximum the width of the collection view
    cell.label.text = array[indexPath.item]
    return cell
}

结果是如下的集合视图:

【讨论】:

  • 哦,我对标签的约束是左上角和右下角的 20
  • 当我滚动或重新加载项目时,我的布局变得有点奇怪,imgur.com/a/zSdrCGj
  • 我会玩内容压缩和内容拥抱值:medium.com/@abhimuralidharan/…
  • 如果没有,您将不得不自己调整单元格的大小,从那时起您就可以控制它的工作方式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 2018-10-10
  • 1970-01-01
相关资源
最近更新 更多