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