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

时间:2015-12-02 09:50:36

标签: ios objective-c uitableview

我创建了一个具有IMAGE视图的自定义单元格,两个标签的标签数据是从plist文件中填充的,数据填充正确,但在前端,单元格没有&#39 ; t正确显示数据,标签剪切数据。我正在使用Uilabel观点。

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

-(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水平+垂直..

请帮助..

感谢分配。

4 个答案:

答案 0 :(得分:1)

您可以使用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);

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

答案 1 :(得分:1)

使用以下方法计算您的UILabel高度:

add也在你的班级中使用这个方法。

- (CGFloat)getLabelHeight:(UILabel*)label{
CGSize constraint = CGSizeMake(label.frame.size.width, CGFLOAT_MAX);
CGSize size;

NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init];
CGSize boundingBox = [label.text boundingRectWithSize:constraint
                                              options:NSStringDrawingUsesLineFragmentOrigin
                                           attributes:@{NSFontAttributeName:label.font}
                                              context:context].size;

size = CGSizeMake(ceil(boundingBox.width), ceil(boundingBox.height));

return size.height;}

根据您的要求更新 heightForRowAtIndexPath 方法: 计算所有UI高度并返回。

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

Customviewcell *cell=[tableView dequeueReusableCellWithIdentifier:@"cell"];

CGFloat totalHeight = 0;

cell.CustomTitle.text=justTitles[indexPath.row];
//get label Height
totalHeight += [Helper getLabelHeight:cell.CustomTitle];

cell.Customimage.image = [UIImage imageNamed:justThumbs[indexPath.row]];
CGFloat imageHeight = cell.Customimage.frame.size.height; //or Add image height here

totalHeight += imageHeight;

return totalHeight;}

答案 2 :(得分:0)

在iOS8 +中,您可以使用自定义单元格: http://www.appcoda.com/self-sizing-cells/

答案 3 :(得分:-1)

自动调整单元格大小在Ios 8.0中可用,我的部署目标是ios 7.0,导致布局问题。

请参阅这些文章:

http://www.appcoda.com/self-sizing-cells/

“守则”很快,但也需要在目标c中做同样的事情。

这对你也有帮助。

http://useyourloaf.com/blog/self-sizing-table-view-cells.html