我在一个名为CollectionViewCell的类中的UICollectionViewCell中有一个UILabel,它的工作正常。但是当UILabel小于我想放入的文本时,就会出现问题。
我已经制作了[cell.label sizeToFit];在cellForItemAtIndexPath中。
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
NSDictionary *news = [self.select objectAtIndex:indexPath.row];
CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
cell.label.text = [news objectForKey:@"content"];
[cell.label setFont:[UIFont systemFontOfSize:15]];
cell.label.numberOfLines = 0;
[cell.label sizeToFit];
cell.label.preferredMaxLayoutWidth = 292.f;
return cell;
}
已经使这样的约束回答https://stackoverflow.com/a/16009707/2577738并且仅适用于7个第一个单元格,其他约束只有29个高度,这是我为实现大小而实现的代码细胞变量。
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
CollectionViewCell *cell = (CollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath];
int h = 29 + cell.label.frame.size.height;
return CGSizeMake(292, h);
}
这是一些有效的结果
答案 0 :(得分:0)
如果这是使用UICollectionViewFlowLayout,则必须实现collectionView:layout:sizeForItemAtIndexPath:
。这是你必须进行测量的地方。
现代技术是使用自动布局约束并调用systemLayoutSizeFittingSize:
为您计算单元格大小。这是实际的代码:
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
self.modelCell.lab.text = self.sectionData[indexPath.section][indexPath.row]
var sz = self.modelCell.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)
sz.width = ceil(sz.width); sz.height = ceil(sz.height)
return sz
}
请注意,这意味着您必须在collectionView:layout:sizeForItemAtIndexPath:
(进行测量)和cellForItemAtIndexPath:
中提供标签内容(以使标签内容出现在实际单元格中)。