我想根据单元格中内容的大小(特别是UILabel)更改UICollectionViewCell的高度。我在
中设置了UILabel高度-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionViewcellForItemAtIndexPath:(NSIndexPath *)indexPath
然后我在
中设置UICollectionViewCell高度- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath
看起来第二种方法在第一种方法之前调用,因此尚未计算标签的高度。完整的代码如下(警告:需要整洁!)。有什么想法吗?
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *myCell = [collectionView
dequeueReusableCellWithReuseIdentifier:@"Cell"
forIndexPath:indexPath];
label = [[UILabel alloc] initWithFrame:CGRectMake(80,10,width - 90,0)];
label.text = @"Hellfoneofinerigoneriognwirotngwtngowirnthointgonowenfkqejb fgjkreb glknrlegkn ewlj qerlgjnweofjpeorihgpireghiperhgorgrngl;rtnh;ltm;l";
label.lineBreakMode = NSLineBreakByWordWrapping;
label.numberOfLines = 0;
label.font = [UIFont fontWithName:@"HelveticaNeue-UltraLight" size:17];
[label sizeToFit];
[myCell.contentView addSubview:label];
CGSize labelY = [label bounds].size;
i = labelY.height;
NSLog(@"Height: %d", i);
return myCell;
}
#pragma mark <UICollectionViewDelegate>
- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Height: %d", i);
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
CGSize result = [[UIScreen mainScreen] bounds].size;
if(result.height == 568)
{
return CGSizeMake(300.f, i);
}
if(result.height == 667)
{
return CGSizeMake(340.f, i);
}
if(result.height == 736)
{
return CGSizeMake(370.f, i);
}
}
return CGSizeMake(300.f, i);
}
编辑:没有真正解释错误。 <{1}}被调用时,i的高度等于零。
答案 0 :(得分:0)
通过在高度方法中创建Label并确定其高度来进行工作。
答案 1 :(得分:0)
布局委托方法- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
将为
在数据源方法-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
之前执行,并sizeForItemAtIndexPath
计算所有单元格的大小,然后开始构建它们。
所以,您应该只通过indexPath获取内容,然后计算显示的高度,在cellForItemAtIndexPath
中应用高度值
答案 2 :(得分:0)
您尝试实施的是自我调整大小UICollectionViewCell
。要实现这一点,您需要:
estimatedItemSize
Vertical Content Hugging Priority
为250 preferredLayoutAttributesFitting
我在这里写了一篇关于Self Sizing UICollectinViewCell
的更长篇博文:
http://parveenkaler.com/posts/self-sizing-uicollectionviewcell-swift