iOS计算tableView单元格中的文本高度

iOS计算tableView单元格中的文本高度,ios,ipad,uitableview,storyboard,cell,Ios,Ipad,Uitableview,Storyboard,Cell,我目前正在开发一个应用程序,它在tableview中显示一些推文。在故事板上,我创建了一个原型单元,其中包括tweet条目的基本gui概念 看起来大概是这样的: ++++++++++++++ ++Username++++ ++++++++++++++ ++Tweet+++++++ ++++++++++++++ ++Time-Ago++++ ++++++++++++++ 现在我用下面的代码计算单元格的高度,但不知怎么的,它失败了 - (CGFloat)tableView:(UITableView

我目前正在开发一个应用程序,它在tableview中显示一些推文。在故事板上,我创建了一个原型单元,其中包括tweet条目的基本gui概念

看起来大概是这样的:

++++++++++++++
++Username++++
++++++++++++++
++Tweet+++++++
++++++++++++++
++Time-Ago++++
++++++++++++++
现在我用下面的代码计算单元格的高度,但不知怎么的,它失败了

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSDictionary * currentTweet = [tweetArray objectAtIndex: indexPath.row];
    NSString * tweetTextString = [currentTweet objectForKey: @"text"];
    CGSize textSize = [tweetTextString sizeWithFont:[UIFont systemFontOfSize:15.0f] constrainedToSize:CGSizeMake(630, 1000) lineBreakMode: NSLineBreakByWordWrapping];

    float heightToAdd = 24 + textSize.height + 15 + 45;
    if(heightToAdd < 90) {
        heightToAdd = 90;
    }

    return heightToAdd;
}
-(CGFloat)tableView:(UITableView*)tableView rowatinexpath的高度:(nsindepath*)indepath{
NSDictionary*currentTweet=[tweetArray objectAtIndex:indexath.row];
NSString*tweetTextString=[currentTweet objectForKey:@“text]”;
CGSize textSize=[tweetTextString sizeWithFont:[UIFont systemFontOfSize:15.0f]constrainedToSize:CGSizeMake(6301000)LineBreakByWordWrapping]模式:NSLineBreakByWordWrapping];
浮动高度toadd=24+textSize.height+15+45;
如果(高度增加<90){
高度toadd=90;
}
返回高度增加;
}

顺便说一句,还有一件事很奇怪。如果我滚动tableview,整个应用程序似乎都冻结了。这是正常的还是我做错了什么?

请针对您的问题尝试以下方法:

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

    NSDictionary * currentTweet = [tweetArray objectAtIndex: indexPath.row];

    NSString * tweetTextString = [currentTweet objectForKey: @"text"];

    CGSize textSize = [tweetTextString sizeWithFont:[UIFont systemFontOfSize:15.0f] constrainedToSize:CGSizeMake(240, 20000) lineBreakMode: UILineBreakModeWordWrap]; //Assuming your width is 240

    float heightToAdd = MIN(textSize.height, 100.0f); //Some fix height is returned if height is small or change it to MAX(textSize.height, 150.0f); // whatever best fits for you

    return heightToAdd;
}

希望有帮助。

如果您正在寻找iOS 7的答案,我在这里找到了:


冷冻时不正常。从外部来看,我有一种感觉,这可能是由于以下两个原因之一:1)你做了太多的计算,导致了这一结果。2) 为了以格式化的方式显示文本,显然您可能对每一行的文本使用了某种编码。您好,谢谢您的评论。你说得对。我每秒调用[tableView reloadData]更新秒前计数器。我取下柜台,冷冻停止了。我正试图在cellview中实现这一点。:)对tableView.visibleCells执行foreach操作,并使用当前时间更新每个单元格。正如您发现的那样,避免不惜一切代价重新加载数据。:)您用于计算可变高度文本单元格的方法与我以前成功使用的方法相同-这与我以前成功使用的方法一样快。您好,谢谢您的帮助。我玩了一会儿,终于成功了!谢谢:)
sizeWithFont
UILineBreakModeWordWrap
不推荐使用