我有一个带有标签的垂直集合视图,在我的流程布局中,我使用UICollectionViewFlowLayoutAutomaticSize来调整单元格大小,但是当我给标签指定很长的字符串时,label中的行数设置为0,这会给我带来错误。
误差
请检查委托返回的值。相关的 UICollectionViewFlowLayout实例是UICollectionViewFlowLayout,它附加到UICollectionView;frame = (0 88;375 690);clipsToBounds = YES;autoresize = RM+BM;gestureRecognizers = NSArray layer = CALayer;contentOffset:{0,0};contentSize:{375,2};adjustedContentInset:{0,0,0}>集合视图布局: UICollectionViewFlowLayout 在上设置一个符号断点,以便在调试器中捕捉到这一点。 没有定义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
}发布于 2018-07-20 11:28:28
问题是,由于某种原因,UICollectionViewFlowLayout没有设置单元格的最大宽度,而且由于像您一样设置了约束,所以一个单元格或多个单元格的width大于collectionView的宽度。
下面是如何修复它,将width约束添加到UICollectionViewCell子类中的标签中,并将其设置为less than equal而不是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
}结果是如下所示的集合视图:

https://stackoverflow.com/questions/51440048
复制相似问题