当我更改行数时,带有rowHeight的UITableView UITableViewAutomaticDImension不会更新

时间:2017-04-05 12:29:11

标签: ios uitableview ios-autolayout uitableviewautomaticdimension

我有一个UITableViewCell,其描述标签固定在底部,如下所示: enter image description here

点按描述标签可在numberOfLines3之间切换0

- (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];
}

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

折叠(默认):

enter image description here

展开:

enter image description here

3 个答案:

答案 0 :(得分:2)

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

最好的方法是将一个委托功能添加回你的tableview控制器,然后只需背对背地调用这些行:

tableView.beginUpdates()
tablebleView.endUpdates()

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

编辑:在此处查看我的答案 - 其中包含演示项目的链接:Expand UILabel inside UITableView with "more" button like Instagram

答案 1 :(得分:0)

当单元格放置它的子视图时,表格视图实际上没有任何方式可以知道任何已更改的内容。您必须手动告诉表视图重新计算。

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

查看reloadData重新加载整个表格视图,或reloadRowsAtIndexPaths:如果您想重新加载Apple reference docs中的特定索引。

答案 2 :(得分:0)

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

self.dataTableView.beginUpdates()
self.dataTableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: UITableViewRowAnimation.automatic)
self.dataTableView.endUpdates()