CollectionView自动调整大小标签不起作用

时间:2018-07-20 10:01:19

标签: ios swift autolayout collectionview

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

错误

  

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

     

UICollectionViewFlowLayout实例是UICollectionViewFlowLayout,并且   它附加到UICollectionView;框架=(0 88; 375 690);   clipsToBounds = YES;自动调整大小= RM + BM; poseRecognizers = NSArray   层= CALayer; contentOffset:{0,0}; contentSize:{375,2};   AdjustedContentInset:{0,0,0,0}>集合视图布局:   UICollectionViewFlowLayout

     

在以下位置设置符号断点   UICollectionViewFlowLayoutBreakForInvalidSizes可以在   调试器。

     

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

约束

enter image description here

代码

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 个答案:

答案 0 :(得分:1)

问题是由于某种原因class WordSerializer(serializers.ModelSerializer): seniority_id = serializers.SerializerMethodField() department_id = serializers.SerializerMethodField() score_nr = serializers.SerializerMethodField() cuvint = serializers.SerializerMethodField() class Meta: model = Word fields = ("cuvint", "frequency", "is_stem", "score_nr", "department_id", "seniority_id") def get_seniority_id(self, obj): if obj.seniority_id: return obj.seniority_id.name return None def get_department_id(self, obj): if obj.department_id: return obj.department_id.name return None def get_score_nr(self, obj): return obj.score_nr.score_nr def get_cuvint(self, obj): return obj.cuvint.cuvint 并没有设置单元格的最大宽度,并且由于您像这样设置了约束,所以发生的情况是一个单元格或多个单元格的UICollectionViewFlowLayout是大于width的宽度。

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

Add a constraint

下一步,对该限制进行出口,以便以后可以进行设置。

Outlet

然后在less than equal CollectionViewDataSource中,您可以将宽度常数设置为小于cellForItemAtIndexPath宽度减去您添加的填充(在我的情况下,标签的左边和右边分别为20 + 20)

CollectionView

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

enter image description here