簡體   English   中英

計算iOS中水平UICollectionView的動態單元格高度

[英]Calculate dynamic cell height for a horizontal UICollectionView in iOS

我正在創建基於水平滾動卡的UI。 全部設置了一張,但是,有些卡現在比其他卡更大(內容更多)。 在這種情況下,我想我的解決方案將無法正常工作,因為我按如下方式計算流程布局大小:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake((collectionView.frame.size.width-30)/2,(collectionView.frame.size.height);
} 

這限制了單元格的高度。 甚至有可能具有用於水平布局的UICollectionViewCells動態高度? 在網絡上找不到任何線索。 請幫忙 !!

 - (CGSize)calculateSizeForSizingCell:(UICollectionViewCell *)sizingCell width:(CGFloat)width {
CGRect frame = sizingCell.frame;
frame.size.width = width;
sizingCell.frame = frame;
[sizingCell setNeedsLayout];
[sizingCell layoutIfNeeded];

CGSize size = [sizingCell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize
                    withHorizontalFittingPriority:UILayoutPriorityRequired
                          verticalFittingPriority:UILayoutPriorityFittingSizeLevel];
return size;
 }

您必須動態計算集合視圖單元格內每個文本的高度。

請參閱以下代碼,並根據您的要求進行更新。

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {

    NSMutableDictionary *currentObject = [yourMutableArray objectAtIndex:indexPath.row];
    CGFloat cvWidth = (collectionView.frame.size.width-30)/2;
    CGSize rect;

    CGFloat heightOfText = [self getTextHeightFromString:[currentObject valueForKey:@"yourKeyName"] ViewWidth:cvWidth WithPading:10];

    CGFloat heightOfSecondText = [self getTextHeightFromString:[currentObject valueForKey:@"yourSecondKeyName"] ViewWidth:cvWidth WithPading:10];

    //get height of each and every text and calculate total height

    rect.width = cvWidth;
    rect.height = heightOfText + heightOfSecondText;

    return rect;

}

- (CGFloat)getTextHeightFromString:(NSString *)text ViewWidth:(CGFloat)width WithPading:(CGFloat)padding
{
    CGRect rect = [text boundingRectWithSize:CGSizeMake(width, MAXFLOAT)
                                     options:NSStringDrawingUsesLineFragmentOrigin
                                  attributes:@{NSFontAttributeName: [UIFont fontWithName:@"yourFontName" size:16]} // change font size accordingly
                                     context:nil];

    return rect.size.height + padding;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM