19

私はiPhone上で小さな小さなTwitterクライアントを構築しています。当然のことながら、ツイートを UITableView に表示していますが、もちろん長さもさまざまです。テキストに基づいてセルの高さを動的に変更しています。

- (CGFloat)heightForTweetCellWithString:(NSString *)text {
  CGFloat height = Buffer + [text sizeWithFont:Font constrainedToSize:Size lineBreakMode:LineBreakMode].height;
  return MAX(height, MinHeight);
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
  NSString *text = // get tweet text for this indexpath
    return [self heightForTweetCellWithString:text];
  }
}

PragProg book のアルゴリズムを使用して、実際のツイート セルを表示しています。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  static NSString *CellIdentifier = @"TweetCell";
  TweetCell *cell = (TweetCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil) {
    cell = [self createNewTweetCellFromNib];
  }
  cell.tweet.text = // tweet text
  // set other labels, etc
  return cell;
}

起動すると、表示されているすべてのツイートが問題なく表示されます。ただし、下にスクロールすると、下のツイートがかなりごちゃごちゃになっています。セルが画面からはみ出すと、上のセルの高さが必要以上に大きくなり、一部が隠れてしまうようです。その下のセル。セルがビューの上部に到達すると、セル自体がリセットされ、適切にレンダリングされます。上にスクロールしても問題はありません。

これが実際の動作を示すビデオです: http://screencast.com/t/rqwD9tpdltd

私はすでにかなり試しました:作成時にセルのフレームのサイズを変更し、異なる高さのセルに異なる識別子を使用し(つまり[NSString stringWithFormat:@"Identifier%d", rowHeight])、Interface Builderのプロパティを変更します...

投稿できる追加のコード スニペットがある場合は、お知らせください。よろしくお願いします。

4

1 に答える 1