UITableViewCell调整高度,不改变其内容布局

时间:2013-04-23 09:02:53

标签: ios iphone objective-c uitableview

这是在杀我! 我有UITableView个单元格,其中包含图片,姓名和电话号码 看这里:

enter image description here

现在,我想在触摸时消耗单元格的高度,这样我就可以在其中添加一些按钮。当我消耗细胞时,我也会改变它的bg图像(更高的一个) 我使用[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];来做它并且效果很好,可以平滑地动画细胞,除了它还会更改单元格的内容:

Cell's content resized :(

我能做的任何事情都会让细胞调整后的内容保持不变吗?

顺便说一句,我确实尝试过使用,
[_tableView beginUpdates];
[_tableView endUpdates];
但是细胞只是跳了起来#34;为了它的新高度所以我放弃了。

5 个答案:

答案 0 :(得分:2)

您需要了解contentView的布局。

如果您使用 Autolayout ,请检查您的约束(cell.contentView.constraints)。如果您使用 UIViewAutoresizing ,请为contentView的所有子视图设置正确的autoresizingMasks(cell.contentView.autoresizingMask)。您也可以尝试关闭autoResizing(cell.contentView.autoresizesSubviews = NO),但这可能会导致错误的结果。

另外我想知道,为什么单元格backgroundImage中有箭头?可能你也应该使用其他图像。

答案 1 :(得分:2)

您可以在展开前创建两个自定义单元格,为扩展单元格创建另一个自定义单元格 当您触摸单元格存储所选单元格indexpath并在重新加载表格时,在cellForRowAtIndexPath:中检查indexpath并相应地加载单元格。

答案 2 :(得分:1)

尝试将名称和电话号码标签的UIViewAutoresizing掩码(或内容中的任何其他UI元素)设置为固定的上边距。

答案 3 :(得分:0)

谢谢大家的答案,但没有任何帮助。 起初我使用了内置的单元格项目(imageView,textLabel,detailTextLabel),这些单元格随着单元格的过渡而变化。 当我将自定义子视图(带有已定义的帧)添加到它工作的单元格时。

答案 4 :(得分:0)

尝试以下委派方法来设置tableview的高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 70.0;
}

您可以创建图像数组

imgPaths = [[NSArray alloc] 
                initWithObjects:
                [[NSBundle mainBundle] pathForResource:@"abc" ofType:@"png"],
                [[NSBundle mainBundle] pathForResource:@"def" ofType:@"png"],nil];

在cellForRowAtIndexPath方法中添加它。

示例:

[cell.imageView setImage:[UIImage imageWithContentsOfFile:[imgPaths objectAtIndex:indexPath.row]]];