uitableview 自动布局自定义单元格导致额外高度

Posted

技术标签:

【中文标题】uitableview 自动布局自定义单元格导致额外高度【英文标题】:uitableview autolayout custom cell causing extra height 【发布时间】:2017-07-13 09:53:14 【问题描述】:

。在不同的项目中正常工作时无法检测到导致问题的位置。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

    [_stubCell layoutSubviews];

    [self configureCell:_stubCell atIndexPath:indexPath];

    CGFloat height = [_stubCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
    return height;



- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath 
    return 40.f;


- (void)configureCell:(CCACustomCell *)cell atIndexPath:(NSIndexPath *)indexPath 
    cell.customLabel.text = [_tableData objectAtIndex:indexPath.row];
    cell.customLabel.font = [UIFont fontWithName:@"Avenir-Light" size:16.0];
    cell.customLabel.textColor = UIColorFromRGB(0x32383B);


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    CCACustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    [self configureCell:cell atIndexPath:indexPath];
    return cell;

【问题讨论】:

请检查分配的 UILabel 的文本字符串是否在开头包含任何“\n”下一行字符。 没有朋友,下一行没有“\n”字符 @santanu,这些是动态单元格还是静态单元格??? 动态单元格... @santanu,你检查的屏幕尺寸是多少??? 【参考方案1】:

您能否提供有关如何创建 _stubCell 的详细信息?这可能是由于标签的某些限制。 你试过计算字符串高度吗?

+(CGFloat )calculateStringHeight:(NSString *)string WithFont:(UIFont *)font andSidePadding:(CGFloat )padding

  CGRect rect = [string boundingRectWithSize:CGSizeMake([[UIScreen mainScreen]bounds].size.width - (2*padding), 1000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@NSFontAttributeName:font context:nil];
  return rect.size.height;

【讨论】:

【参考方案2】:

您可以像这样为您的标签返回所需的高度。您应该在哪里传递您的描述标签宽度在 LABEL_DESCRIPTION_WIDTH。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

   CGSize constrainedSize = CGSizeMake(LABEL_DESCRIPTION_WIDTH , 9999);
   NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:FONT_NAME size:FONT_SIZE], NSFontAttributeName,nil];
   NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:[_tableData objectAtIndex:indexPath.row] attributes:attributesDictionary];
   CGRect requiredHeight = [string boundingRectWithSize:constrainedSize options:NSStringDrawingUsesLineFragmentOrigin context:nil];
   return requiredHeight;

【讨论】:

以上是关于uitableview 自动布局自定义单元格导致额外高度的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局在屏幕更改时调整自定义单元格中的 UIButton 字体

如何为具有与内置单元格相同的布局指标的“UITableView”提供自定义“UITableCell”?

具有自动布局的自定义 UITableViewCell 会导致警告

在 UICollectionView/UITableView 中为滚动视图的偏移设置动画会导致单元格过早消失

使用 Auto Layout 创建具有多个不同自定义单元格的 UITableView 具有几乎相同的子视图

滚动时 UITableViewCell 自动布局抖动的动态单元格高度问题