我有一个UITableViewCell
,其描述标签固定在底部,如下所示:
点按描述标签可在numberOfLines
和3
之间切换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];
}
当我点击标签时,线条数确实会改变,但单元格不会扩展以适应新的行数。我该如何解决?
折叠(默认):
展开:
答案 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()