点击时动态更改tableviewcell高度

时间:2016-02-18 09:59:50

标签: ios objective-c uitableview

我有一个由一些自定义表格视图单元格填充的表格视图,在每个单元格中都有UILabel,其原始numberOFLines为5.此UILabel的内容可能超过5行所以如果我将numberOFLines设置为0,这个UILabel可以扩展到10行甚至更多,所以当我将numberOFLines设置为0时,单元格高度应该更大。

假设首先当numberOfLines为5时,一个单元格的高度为200.当我点击此标签时,numberOfLines设置为0,此标签会尝试显示所有内容,应该有10行文本,此单元格的高度应为250,以便它可以正确显示所有内容。当我再次点击它时,numberOfLines应该回到5,并且单元格高度应该回到200.

所以我在这个标签上添加了UITapGestureRecognizer,点击时会调用一个方法重置numberOfLines

- (void)mainContentLabelTapped {
    NSLog(@"main content label tapped");
    (self.mainContentLabel.numberOfLines == 0) ?
            [self.mainContentLabel setNumberOfLines:5]:
            [self.mainContentLabel setNumberOfLines:0];
}

问题在于,当我点击mainContentLable时,此标签本身会扩展到更多行或缩小到5行但单元格高度保持不变,直到我将此单元格滚出屏幕并再次向后滚动以使其高度可以重新计算。

那么当我点击该标签时如何更改单元格高度?

stackoverflow中有很多关于表格视图单元格的动态高度的问题,但所有解决方案都是向表格视图发送消息,例如begin/endUpdatereloadData。在我的问题中,点击手势是我自己单元格的.m文件中的令牌护理,因此我无法找到将这些消息发送到表格视图并让它重新计算单元格高度的方法。

谢谢!

1 个答案:

答案 0 :(得分:2)

您必须重新加载UITableView,并通过重新加载来更改特定单元格的高度。

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        selectedIndexPath = indexPath;
        [self.tableView beginUpdates];
        [self.tableView endUpdates];
    }

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if ([indexPath compare:selectedIndexPath] == NSOrderedSame) {
            return 80;
        }
        return 40;
    }

这样,选定的行高将比其他行高。

由于

快乐的编码!