私は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のプロパティを変更します...
投稿できる追加のコード スニペットがある場合は、お知らせください。よろしくお願いします。