在我的应用程序中,为iOS7设计,我有一个分组的UITableView。每行显示用户输入的一些文本。我根据每行文本的长度计算行高。每行也有相同的背景图像,但是根据行的高度使用resizableImageWithCapInsets进行拉伸。
以下是我的代码。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.currentChatView registerClass:[UITableViewCell class] forCellReuseIdentifier:
@"CurrentText"];
static NSString *CellIdentifier = @"CurrentText";
UITableViewCell *cell = [self.currentChatView dequeueReusableCellWithIdentifier:
CellIdentifier forIndexPath:indexPath];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
}
UIImage *cellImage;
UIImageView *cellImageView = [[UIImageView alloc]init];
UILabel *cellLabel = [[UILabel alloc]init];
cellLabel.numberOfLines = 0;
cellLabel.lineBreakMode = NSLineBreakByWordWrapping;
cellLabel.text = [[self.textArray
objectAtIndex:indexPath.row] objectForKey:@"text"];
UIImage *image = [UIImage imageNamed:@"aqua.png"];
UIEdgeInsets insets = UIEdgeInsetsMake(image.size.height/2, image.size.width/2,
image.size.height/2, image.size.width/2);
cellImage = [image resizableImageWithCapInsets:insets];
cellImageView.frame = CGRectMake(0, 0, 215, cellHeight + 5);
cellLabel.frame = CGRectMake(10, 0, 200, cellHeight);
cellImageView.image = cellImage;
[cell.contentView addSubview:cellImageView];
[cell.contentView addSubview:cellLabel];
return cell;
}
计算表格行高度并正确显示。但是,文本和背景基于最后一行计算的高度显示。
例如,如果第二行有两行文本而最后一行只有一行,则显示第二行的高度为2行,但只有文本和图像的上半部分显示在行。行的下半部分为空,背景为白色。最后一行显示正确。
同样,如果最后一行有两行文字,那么所有行的图像背景都会被拉伸以填充两行文字。
我不确定原因是什么,无法在任何地方找到解决方案。非常欢迎您的建议。
答案 0 :(得分:0)
我认为问题在于您使用实例变量cellHeight
来存储每行的单元格高度,并且在需要时不会更新。您可以尝试使用(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
中动态获取单元格高度。
答案 1 :(得分:0)
我想通了......所有行的单元格高度都是在heightForRowAtIndexPath
中预先计算出来的。
当控制到达cellForRowAtIndexPath
时,我有最后一个cellHeight。
最佳解决方案是在heightForRowAtIndexPath
本身中分配imageView和标签帧大小。