heightForRowAtIndexPath被过早调用

时间:2013-06-01 20:58:29

标签: objective-c uitableview twitter height cells

我目前正在通过Json获取Twitter feed并且在我获得推文的长度之前调用了heightForRowAtIndexPath。因此,当加载heightForRowAtIndexPath时,fullTweet.length始终为零。我正在尝试像http://gyazo.com/632d09685268e1737d3c58bf1718cbff.png那样调整单元格的大小,所以我不会浪费任何额外的空格。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if(fullTweet.length >= 50) {
  return 50.0f;
      } else
  return 92.0f;
}

我的方法如何运作

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

static NSString *CellIdentifier = @"TweetCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
NSDictionary *tweet = [tweets objectAtIndex:indexPath.row];

NSString *text = [tweet objectForKey:@"text"];
cell.textLabel.text = text;
fullTweet = text;
NSLog(@"%i", fullTweet.length);
cell.textLabel.numberOfLines = 3;

return cell;
}

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您似乎尝试使用实例变量cellForRowAtIndexPath将单元格的文本从heightForRowAtIndexPath传递到fullTweet

这不起作用,因为首先为所有单元格调用heightForRowAtIndexPath,然后  可见单元格的调用cellForRowAtIndexPath

所以heightForRowAtIndexPath应该从数据源获取信息, 类似的东西:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSDictionary *tweet = [tweets objectAtIndex:indexPath.row];
    NSString *text = [tweet objectForKey:@"text"];
    if ([text length] <= 50) {
        return 50.0f;
    } else {
        return 92.0f;
    }
}

答案 1 :(得分:0)

收到数据后,只需致电UITableView上的reloadData即可。这将强制表视图重新加载所有单元格。