的UITableView与rowHeight的UITableViewAutomaticDImension当我改变
我有固定于底部的描述标签一个UITableViewCell
如下所示的行数不更新0
:的UITableView与rowHeight的UITableViewAutomaticDImension当我改变
- (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];
}
当我在标签上点击,行数不改变,但细胞不展开,以适应线路的新号码。我该如何解决?
折叠(默认):
扩展:
如果您在限制设置正确,你不需要重新加载数据---不整表,甚至没有受影响的行。
最好的方法是后面加个委托功能到你的tableview控制器,并调用这些行背到后面:
tableView.beginUpdates()
tablebleView.endUpdates()
,将告诉自动布局重新计算的行高度。
编辑:检查我的回答 - 其中包括一个链接到一个演示项目 - 在这里:Expand UILabel inside UITableView with "more" button like Instagram
非常好!简直太棒了!非常感谢 –
当细胞勾画出它的子视图,表视图实际上并没有知道事情的任何方式已经改变。您必须手动告诉表视图重新计算。
你可能要重新加载表视图,或至少细胞的变化在发生。
在reloadData
看看重新加载整个表视图,或者reloadRowsAtIndexPaths:
如果你只想重装具体指标在Apple reference docs。
这种方法的问题是,当我调用reloadRowsAtIndexPaths时,它会重新创建单元格。这意味着我需要在我的'UIViewController'中存储'jobDescriptionExpanded'状态并在单元格创建时传递它。虽然这可行,但并不完全优雅 –
为什么不使用“UITableViewCell”的选定状态来决定“jobDescriptionExpanded”的值? 不幸的是,让'UITableView'更新单元格高度的唯一方法是重新加载单元格。所以不管你觉得你的解决方案多么'不雅',你必须这样做。 –
您可以更新heightForRowAtindexPath中的tableview单元格高度。 调用reloadRowsAtIndexPath更新UITableView的单行的方法。
self.dataTableView.beginUpdates()
self.dataTableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: UITableViewRowAnimation.automatic)
self.dataTableView.endUpdates()
仍无法了解你的实际问题。问题是与标签或扩大tableView? –
'UITableViewAutomaticDimension'根据其内容自动计算单元格的高度。在我的情况下,我正在更新标签的高度,但tableview不会更新单元格的高度。如何获取桌面视图以更新单元格的高度 –
您需要强制重新加载表格。首先'HeightOfRow'方法将会调用'cellForRow'。所以当调用'HeightOfRow'方法时,确保你有一个新的标签高度。并请添加您的代码工作完成这一点。 –