【问题标题】:how to dynamically change the height of tableview cell for custom cell?如何动态更改自定义单元格的表格视图单元格的高度?
【发布时间】:2015-10-27 09:51:05
【问题描述】:

我创建了一个自定义单元格表视图。这个自定义单元格包含标签,所以我从情节提要添加了标签,并从服务器显示了它们的数据。所以如果标签没有数据,那么我隐藏标签,但如果有是数据,然后我用服务器数据显示标签。因此,如果标签上有数据,则单元格的高度可以说 180,因为标签始终存在。现在,当标签没有数据时,我想删除或隐藏标签并降低单元格的高度,因为所有标签都是垂直显示的。这样我想计算单元格的高度。

HeightForAtIndex 的问题

  • 如何访问 heightForRow 中的单元格?
  • 我要写什么代码才能得到 heightForRowAtIndex 中的单元格?

编辑:

我试过这段代码:

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

      float like_height,c_one_height,c_two_height,c_three_height,tv_height,header_height,operations_height;
    //define variables here
    if(!self.customCell)
    {
        self.customCell = [self.table_view dequeueReusableCellWithIdentifier:@"homeCell"];
    }
     Post *user_post=[arr_post objectAtIndex:indexPath.row];
     int like_count=[user_post.like_count intValue];
    float comment_count=[user_post.comment_count intValue];
    [self.customCell setSelectionStyle:UITableViewCellSelectionStyleNone];

    if(like_count>0)
    {
        like_height=self.customCell.label_like_count.frame.size.height;

    }
    else
    {
        like_height=0;
    }
    if(comment_count<=0)
    {
        c_one_height=0;
        c_two_height=0;
        c_three_height=0;

    }
    else if(comment_count==1)
    {
        c_one_height=self.customCell.first_comment.frame.size.height;
        c_two_height=0;
        c_three_height=0;

    }
    else if(comment_count==2)
    {
        c_one_height=self.customCell.first_comment.frame.size.height;
        c_two_height=self.customCell.second_cmment.frame.size.height;
        c_three_height=0;
    }
    else if(comment_count==3)
    {
        c_one_height=self.customCell.first_comment.frame.size.height;
        c_two_height=self.customCell.second_cmment.frame.size.height;
        c_three_height=self.customCell.third_comment.frame.size.height;
    }
    tv_height=self.customCell.view_tvContainer.frame.size.height;
    header_height=self.customCell.header_view_height.frame.size.height;
    operations_height=self.customCell.view_operations_height.frame.size.height;
    CGFloat height = like_height+c_one_height+c_two_height+c_three_height+tv_height+header_height+operations_height;
    // Padding of 1 point (cell separator)
    CGFloat separatorHeight = 1;
    return height + separatorHeight;
}

【问题讨论】:

  • 你能告诉我你项目的部署目标吗?
  • 您是否在代码中使用了自动布局?请提供您的代码,以便我解决您的问题。
  • ios 9 是目标并使用自动布局

标签: ios objective-c iphone uitableview ipad


【解决方案1】:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *text=[InformationArray objectAtIndex:indexPath.row];
    UIFont *font = [UIFont fontWithName:@"HelveticaNeue" size:16.5];
     text = [text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    CGSize labelHeight = [self heigtForCellwithString:text  withFont:font];

 return labelHeight.height +10;

}
//calculate the height
-(CGSize)heigtForCellwithString:(NSString *)stringValue withFont:(UIFont*)font{

CGSize constraint = CGSizeMake(250,9999); 
    NSDictionary *attributes = @{NSFontAttributeName: font};
    CGRect rect = [stringValue boundingRectWithSize:constraint options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:attributes context:nil];

    return rect.size;

}

【讨论】:

  • 是的,您只需计算所有子视图包含的高度并组合所有并返回。将字符串值传递给 heigtForCellwithString 并获取大小。
  • 但在这种情况下我没有得到合适的高度,这就是问题所在
  • 我已经做到了.. 我也完美地完成了 10 种不同的现场工作......在调用高度方法之前,首先检查字段值是否为空。 bcoz 如果我们将空字符串传递给 height 方法,那么它会返回 20 hts。
【解决方案2】:

如果您使用自动布局来调整表格单元格或任何视图的大小,更好的方法是更新视图的NSLayoutConstraint。

要更新表格视图单元格,请参考示例教程:http://derpturkey.com/autosize-uitableviewcell-height-programmatically/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    相关资源
    最近更新 更多