ios - 根据标签文本+图像计算单元格高度

标签 ios objective-c uitableview

我创建了一个具有 ImageView 的自定义单元格,两个标签的标签数据从 plist 文件中填充,数据正确填充但在前端单元格没有正确显示数据,标签剪切的数据。我正在使用 Uilabel View 。

请查看我的代码,我已经在互联网上搜索并遵循了一些教程,但没有任何效果。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    Customviewcell *cell=[tableView dequeueReusableCellWithIdentifier:@"cell"];
    UIImage * image = [UIImage imageNamed:justThumbs[indexPath.row]];
    cell.CustomTitle.text=justTitles[indexPath.row];

    cell.CustomTitle.numberOfLines =0;
    [cell.CustomTitle sizeToFit];
    cell.CustomDes.text=justDesc[indexPath.row];
    cell.CustomDes.numberOfLines=0;
      [cell.CustomDes sizeToFit];
    [cell.CustomTitle layoutIfNeeded];
    [cell.CustomDes layoutIfNeeded];
    [cell layoutIfNeeded];
    cell.Customimage.image=image;
    return cell;
}

根据 stackoverflow 不同问题的答案计算高度的代码。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //Calculate Height Based on a cell
    if (!self.customcell) {
      self.customcell=[tableView dequeueReusableCellWithIdentifier:@"cell"];
    }
    // Configure Cell
    UIImage * image = [UIImage imageNamed:justThumbs[indexPath.row]];
    self.customcell.CustomTitle.text=justTitles[indexPath.row];
    self.customcell.CustomTitle.numberOfLines=0;
    [self.customcell.CustomTitle sizeToFit];
    self.customcell.CustomDes.text=justDesc[indexPath.row];
    self.customcell.CustomDes.numberOfLines=0;
    [self.customcell.CustomDes sizeToFit];
    self.customcell.Customimage.image=image;

    //Layout Cell

    //Get Hieght for the cell

    if([[UIDevice currentDevice]userInterfaceIdiom]==UIUserInterfaceIdiomPhone)
    {

        if ([[UIScreen mainScreen] bounds].size.height == 568)
        {

            CGRect frame = [NSString setAttributeWithString:self.customcell.CustomTitle.text withLineSpacing:0.2 withSize:CGSizeMake(270, 999999999) withFont:self.customcell.CustomTitle.font withLabel:self.customcell.CustomTitle setLabelTextColor:self.customcell.CustomTitle.textColor setTextAlignment:self.customcell.CustomTitle.textAlignment];
            self.customcell.CustomTitle.height.constant = frame.size.height;
            frame = [NSString setAttributeWithString:self.customcell.CustomDes.text withLineSpacing:0.3 withSize:CGSizeMake(150, 999999999) withFont:self.customcell.CustomDes.font withLabel:self.customcell.CustomDes setLabelTextColor:self.customcell.CustomDes.textColor setTextAlignment:self.customcell.CustomDes.textAlignment];
            self.customcell.CustomDes.height.constant = frame.size.height;



        }
        else{

            CGRect frame = [NSString setAttributeWithString:self.customcell.CustomTitle.text withLineSpacing:1 withSize:CGSizeMake(337, 999999999) withFont:self.customcell.CustomTitle.font withLabel:self.customcell.CustomTitle setLabelTextColor:self.customcell.CustomTitle.textColor setTextAlignment:self.customcell.CustomTitle.textAlignment];
            self.customcell.CustomTitle.height.constant = frame.size.height;
            frame = [NSString setAttributeWithString:self.customcell.CustomDes.text withLineSpacing:1 withSize:CGSizeMake(227, 999999999) withFont:self.customcell.CustomDes.font withLabel:self.customcell.CustomDes setLabelTextColor:self.customcell.CustomDes.textColor setTextAlignment:self.customcell.CustomDes.textAlignment];
            self.customcell.CustomDes.height.constant = frame.size.height;


        }
    }
    [self.customcell layoutIfNeeded];

       // CGFloat height = self.customcell.CustomTitle.height.constant+self.customcell.CustomDes.height.constant+189;
    CGFloat height = [self.customcell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;


    //Add padding of 1
    return height;
}

使用 Github 开源库解决了问题,但没有成功。

https://github.com/punchagency/line-height-tool

问题仍然存在,标签的文本被截断,内容卡在必需的位置,内容在 1000 水平 + 垂直..

请帮忙..

谢谢分配。

最佳答案

您可以使用 NSString 方法boundingRectWithSize 获取特定范围内字符串的高度,例如

NSString* text = @"Test text";

CGRect textRect = [text boundingRectWithSize:CGSizeMake(300, CGFLOAT_MAX)
                                                     options:NSStringDrawingUsesLineFragmentOrigin
                                                  attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:12]}
                                                     context:nil];
CGFloat textHeight = ceilf(textRect.size.height);

使用您自己的字体和字体大小,如果需要,您还可以将其他属性添加到属性字典中。

关于ios - 根据标签文本+图像计算单元格高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34039574/

相关文章:

objective-c - iOS ScrollView 禁用自动滚动到顶部

objective-c - objective-c : constantly calling a function

iphone - 更改 UITableViewCell 的图像

ios - 带有 UIImageView 的 UITapGestureRecognizer 仅适用于顶部位置

ios - 如何使用 Google Sign In 保持用户登录状态?

ios - Xamarin 和 ios 10 - 所有页面都移到了标题栏后面

objective-c - 使用选项卡栏 Controller ( Storyboard)阻止访问 UIViewControllers

iphone - iOS 中的内存保留和泄漏

swift - 将 xib View 显示到 UITableView 单元格中

ios - didSelectRowAt indexPath : IndexPath - is always returning the previous selection