【问题标题】:Dynamically resizing a UICollectionViewCell动态调整 UICollectionViewCell 的大小
【发布时间】:2013-01-10 10:27:24
【问题描述】:

我有一个 UICollectionView 和 2 个 UILabel 和一个 UIImage 具有类似的布局:

 --------------------
 |                   |
 |    LABEL1         |
 |    IMAGE          |
 |    LABEL2         |
 |    ......         |
 |    ......         |
 --------------------

Label2 的行数可变,单元格之间不同,我希望能够根据label2 height 自动调整UICollectionView height 的大小,让它“自动填充”单元格。 在 iOS 中可以做到吗?

【问题讨论】:

    标签: ios uicollectionview uicollectionviewcell


    【解决方案1】:

    您可以重写UICollectionViewDelegateFlowLayout的以下方法来动态计算UICollectionViewCell的高度,根据您的要求设置常量值。

    -(CGSize) collectionView:(UICollectionView *)collectionView 
                      layout:(UICollectionViewLayout *)collectionViewLayout 
      sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
    
        UIFont *fontLabel1 = [UIFont systemFontOfSize:17];
        UIFont *fontLabel2 = [UIFont systemFontOfSize:14];
        int padding = 5;
        int maxWidthOfLabel = 300;
        CGSize maximumLabelSize = CGSizeMake(maxWidthOfLabel, CGFLOAT_MAX);
    
        NSString *strLabel1 = @"Label one text";// Get text for label 1 at indexPath
        NSString *strLabel2 = @"Label two text";// Get text for label 2 at indexPath
    
        NSStringDrawingOptions options = NSStringDrawingTruncatesLastVisibleLine |
        NSStringDrawingUsesLineFragmentOrigin;
    
        NSDictionary *attr1 = @{NSFontAttributeName: fontLabel1};
        NSDictionary *attr2 = @{NSFontAttributeName: fontLabel2};
    
        // Calculate individual label heights
        CGFloat heightLabel1 = [strLabel1 boundingRectWithSize:maximumLabelSize
                                                    options:options
                                                 attributes:attr1
                                                    context:nil].size.height;
        CGFloat heightLabel2 = [strLabel2 boundingRectWithSize:maximumLabelSize
                                                    options:options
                                                 attributes:attr2
                                                    context:nil].size.height;
        CGSize sizeOfImage = CGSizeMake(50, 50);
    
        // Calculate height based on all Views (2 Labels + 1 ImageView)
        CGFloat height = heightLabel1+heightLabel2+sizeOfImage.height+2*padding;
        CGFloat width = collectionView.frame.size.width;// Set width
        CGSize size = CGSizeMake(width, height);
        return size;
    }
    

    【讨论】:

    • 当@Chris 询问 UICollectionViewCells 时,为什么这是公认的答案?和 UITableViewCell 不一样...
    • 同意格雷格。不回答问题。
    • 更新了计算 UICollectionViewCell 高度的答案。
    猜你喜欢
    • 2018-08-04
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多