Buduję mały, mały klient Twittera na iPhonie. Oczywiście wyświetlam tweety w UITableView i oczywiście mają one różne długości. Mam dynamicznie zmieniających wysokość komórki w oparciu o tekst całkiem dobrze:UITableView z dynamicznymi wysokościami komórek - co muszę zrobić, aby naprawić przewijanie w dół?
- (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];
}
}
mam wyświetlanie rzeczywistej komórkę tweet za pomocą algorytmu w książce 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;
}
Kiedy uruchomić do góry, wszystkie widoczne tweety wyświetlają się dobrze. Jednak kiedy przewijam w dół, tweety poniżej są dość roztrzepane - wydaje się, że gdy komórka przewinie się poza ekranem, wysokość komórki dla tej powyżej zostanie zmieniona na większą, niż powinna, i zasłania część komórka pod nim. Gdy komórka osiągnie szczyt widoku, resetuje się i renderuje poprawnie. Przewijanie nie przedstawia żadnych trudności.
Oto film, który pokazuje w działaniu: http://screencast.com/t/rqwD9tpdltd
Próbowałem trochę już: zmiana rozmiaru ramki komórki na tworzenie, stosując różne identyfikatory dla komórek o różnych wysokościach (tj [NSString stringWithFormat:@"Identifier%d", rowHeight]
), właściwości zmieniających w konstruktorze interfejsów ...
Jeśli istnieją dodatkowe fragmenty kodu, które można publikować, proszę dać mi znać. Z góry dziękuje za twoją pomoc!
Jakie są wartości "rozmiaru" i "czcionki" w twoim przykładzie? Ciekawi mnie trochę więcej kodu. – Moshe