我正在iPhone上构建一个小小的Twitter客户端。自然,我在UITableView中显示这些tweet,当然它们的长度也不同。我正在根据文本动态地更改单元格的高度,正常运行:
- (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书中的算法显示实际的tweet单元格:
- (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;
}
当我启动的时候,所有的tweet都显示得很好。然而,当我向下滚动时,下面的推文被很明显地向上移动--似乎一旦一个单元格从屏幕上滚动出来,它上面的单元格的高度就会被调整到比它应该的尺寸更大,并且模糊了它下面的部分细胞。当单元格到达视图顶部时,它会重新设置自身并正确呈现。滚动没有困难。
下面是一段视频,显示了这一点的作用:http://creencast.com/t/rqwD9tpdltd
我已经尝试了很多次:在创建时调整单元格的帧大小,对不同高度的单元使用不同的标识符(例如[NSString stringWithFormat:@"Identifier%d", rowHeight]
),更改接口生成器中的属性。
相似问题