【问题标题】:Change tableviewcell height dynamically when tap点击时动态更改uitableviewcell高度
【发布时间】:2016-02-18 18:06:12
【问题描述】:

我有一个由一些自定义表格视图单元格填充的表格视图,在每个单元格中都有一个 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 文件中的令牌护理,因此我找不到将这些消息发送到表格视图并要求它重新计算单元格高度的方法。

谢谢!

【问题讨论】:

    标签: ios objective-c uitableview


    【解决方案1】:

    您必须重新加载 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;
        }
    

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

    谢谢

    编码愉快!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 2016-07-27
      相关资源
      最近更新 更多