如何在 iOS 中动态更改 UICollectionView 单元格高度

Posted

技术标签:

【中文标题】如何在 iOS 中动态更改 UICollectionView 单元格高度【英文标题】:How can change UICollectionView cell height dynamically in iOS 【发布时间】:2015-03-23 05:37:58 【问题描述】:

我在UICollectionView 上创建用于显示来自服务器的一些数据。但我必须根据文本大小动态设置单元格高度。我正在为UICollectionView 创建一个自定义单元格。

在我的ViewDidLoad 方法中检索UICollectionView 单元格:

UINib *cellNib = [UINib nibWithNibName:@"Custom_CollectionViewCell" bundle:nil];
[self.noteBookmarkCollectinView registerNib:cellNib forCellWithReuseIdentifier:@"CustomCell"];

UICollectionView 的以下委托方法:

 #pragma mark Collection view layout things

 -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 
    return 1;
 
 -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
 
    return noteDetailsArr.count;
     
 - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section 
    return 4.0;
 
 - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section 
    return 4.0;
 
 - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
 
    return UIEdgeInsetsMake(0,4,0,4);  // top, left, bottom, right
 
 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
 
    return CGSizeMake(154, 154); // This is my fixed Cell height

   //Before I am trying this below code also, but its not working
    return [(NSString*)[contentArr objectAtIndex:indexPath.row] sizeWithAttributes:NULL];
 
 -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
 
    static NSString *cellIdentifier = @"CustomCell";

    Custom_CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
   cell.contentLbl.numberOfLines = 0;
   cell.contentLbl.tag = indexPath.row;

   cell.contentLbl.text = [contentArr objectAtIndex:indexPath.row];
   [cell.contentLbl sizeToFit];

   return cell;

我的结果是这样的:

注意:绿色为单元格背景色,粉色为标签 BG 颜色。

当我滚动 CollectionView 时,我可以看到像下面的图像和再次滚动后它变得完美(仅适用于最后一行)

如何根据文本动态设置单元格高度。请帮我。我从过去 1 周开始就卡住了。

【问题讨论】:

这里有一个很好的例子来说明如何处理它。点击[这里][1]。 [1]:***.com/questions/28161839/… 这个我已经试过了,但它不起作用 @Catalina T:我需要单元格高度与文本中的标签高度相同 【参考方案1】:

希望对你有帮助

#pragma mark <UICollectionViewDelegate>
- (CGSize)collectionView:(UICollectionView *)collectionView
                  layout:(UICollectionViewLayout*)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath

    NSString * string = [self.array objectAtIndex:indexPath.row]


    //CALCULATE text SIZE:
    CGSize textSize = [string sizeWithAttributes:NULL];
    return textSize;

【讨论】:

以上是关于如何在 iOS 中动态更改 UICollectionView 单元格高度的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.iOS - 如何动态更改标签字体大小?

当按钮是iOS中自定义单元格的子视图时,如何动态更改按钮文本?

iOS 更改页面时如何动态更改 PageControl 颜色?

在 iOS 中动态更改启动图像

如何使用自动布局动态更改超级视图的高度

iOS:在音频单元中动态更改采样率