首页 文章

CollectionView AutoResize标签不起作用

提问于
浏览
0

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

Error

请检查代表返回的值 . 相关的UICollectionViewFlowLayout实例是UICollectionViewFlowLayout,它附加到UICollectionView; frame =(0 88; 375 690); clipsToBounds = YES; autoresize = RM BM; gestureRecognizers = NSArray layer = CALayer; contentOffset:{0,0}; contentSize:{375,2}; adjustContentInset:{0,0,0,0}> collection view layout:UICollectionViewFlowLayout在UICollectionViewFlowLayoutBreakForInvalidSizes上创建一个符号断点,以便在调试器中捕获它 . 未定义UICollectionViewFlowLayout的行为,因为项目宽度必须小于UICollectionView的宽度减去部分insets左右值,减去内容insets左右值

Constraints

enter image description here

Code

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
    }

1 回答

  • 1

    问题是由于某种原因, UICollectionViewFlowLayout 没有设置单元格的最大宽度,并且因为你设置的约束条件与你一样,所以会发生一个单元格或多个单元格的 width 大于 collectionView 的宽度 .

    以下是如何修复它,在 UICollectionViewCell 子类内部的标签中添加 width 约束,并将其设置为 equal ,但设置为 less than equal .

    Add a constraint

    接下来,为该约束做出一个出口,以便以后可以设置 .

    Outlet

    然后在 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
    }
    

    结果如下所示的集合视图:

    enter image description here

相关问题