1

我有一个UITableViewCell固定在底部的描述标签,如下所示: 在此处输入图像描述

点击描述标签在和numberOfLines之间切换:30

- (void)awakeFromNib {
    [super awakeFromNib];
    [self setupView];
}

-(void) setupView
{

    UITapGestureRecognizer * gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(toggleNumberOfLines)];
    self.jobDescriptionLabel.userInteractionEnabled = YES;
    [self.jobDescriptionLabel addGestureRecognizer:gestureRecognizer];
}

- (void) toggleNumberOfLines {
    if(self.jobDescriptionLabel.numberOfLines != 0){
        self.jobDescriptionLabel.numberOfLines = 0;
    }else{
        self.jobDescriptionLabel.numberOfLines = kNumberOfLines;
    }
    [self.jobDescriptionLabel sizeToFit];
    [self layoutIfNeeded];
}

当我点击标签时,行数确实会改变,但单元格不会扩展以适应新的行数。我该如何解决?

折叠(默认):

在此处输入图像描述

扩展:

在此处输入图像描述

4

3 回答 3

4

如果您的约束设置正确,则不需要重新加载数据 --- 不需要重新加载整个表,甚至不需要重新加载受影响的行。

最好的方法是将委托函数添加回您的 tableview 控制器,然后背靠背调用这些行:

tableView.beginUpdates()
tablebleView.endUpdates()

这将告诉自动布局重新计算行高。

编辑:检查我的答案 - 其中包括一个演示项目的链接 - 在这里:在 UITableView 中展开 UILabel,使用“更多”按钮,如 Instagram

于 2017-04-05T14:27:36.840 回答
0

您可以在 heightForRowAtindexPath: 中更新 tableview 单元格高度。调用 reloadRowsAtIndexPath 方法更新 UITableView 的单行。

self.dataTableView.beginUpdates()
self.dataTableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: UITableViewRowAnimation.automatic)
self.dataTableView.endUpdates()
于 2017-04-05T12:44:25.090 回答
0

当单元格布置它的子视图时,表格视图实际上没有任何方式知道任何事情发生了变化。您必须手动告诉表视图重新计算。

您可能想要重新加载表格视图,或者至少要重新加载发生更改的单元格。

查看reloadData重新加载整个表格视图,或者reloadRowsAtIndexPaths:如果您只想重新加载Apple 参考文档中的特定索引。

于 2017-04-05T12:41:56.560 回答