Я создаю крошечный маленький клиент Twitter на iPhone. Естественно, я показываю твиты в 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:
- (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...
Если есть дополнительные фрагменты кода, которые я могу опубликовать, сообщите мне. Заранее благодарим за помощь!