我正在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书中的算法显示了实际的推文单元格:
- (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都显示得很好。然而,当我向下滚动时,下面的tweet非常混乱--似乎一旦一个单元格滚动出屏幕,它上面的单元格的高度就会调整到比正常大小更大,并遮挡住它下面的单元格的一部分。当单元格到达视图顶部时,它会重置自身并正确呈现。向上滚动不会有任何困难。
这是一个实际展示这一点的视频:http://screencast.com/t/rqwD9tpdltd
我已经尝试了相当多:在创建时调整单元格的框架大小,对不同高度的单元格使用不同的标识符(即[NSString stringWithFormat:@"Identifier%d", rowHeight]
),在界面生成器中更改属性……
如果还有其他代码片段可以发布,请让我知道。提前感谢您的帮助!
发布于 2009-03-25 03:30:13
叹一口气。事实证明,我没有把所有的属性都调整得足够好。但至少我摆脱了那个虫子。:)
通过确保检查UITableViewCell
的"Clip Subviews"属性,已修复此行为。
该行为是由于声明我的tweet文本标签具有所需的最大高度引起的--当表格单元格的子视图没有被裁剪时,上面单元格中的标签将呈现在下面的单元格之上。这在第一次呈现屏幕时是不可见的,因为SDK呈现单元格的顺序是向下的,以及它如何将每个单元格堆叠在另一个单元格之上。
https://stackoverflow.com/questions/680067
复制相似问题