当我更改行数时,具有 rowHeight UITableViewAutomaticDImension 的 UITableView 不会更新
UITableView with rowHeight UITableViewAutomaticDImension does not update when I change the number of lines
我有一个 UITableViewCell
,底部有一个描述标签,如下所示:
点击描述标签可在 3
和 0
之间切换 numberOfLines
:
- (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];
}
当我点击标签时,行数确实发生了变化,但单元格没有扩展以适应新的行数。我该如何解决?
折叠(默认):
展开:
当单元格对其子视图进行布局时,table 视图实际上没有任何方式知道任何内容已更改。您必须手动告诉 table 视图重新计算。
您可能想要重新加载 table 视图,或者至少是发生更改的单元格。
查看 reloadData
以重新加载整个 table 视图,或者 reloadRowsAtIndexPaths:
如果您只想重新加载 Apple reference docs 中的特定索引。
您可以在 heightForRowAtindexPath: 中更新表格视图单元格高度。
调用 reloadRowsAtIndexPath 方法更新 UITableView 的单行。
self.dataTableView.beginUpdates()
self.dataTableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: UITableViewRowAnimation.automatic)
self.dataTableView.endUpdates()
如果您的约束设置正确,您不需要重新加载数据 --- 不需要整个 table,甚至不需要重新加载受影响的行。
最好的方法是将委托函数添加回您的 table 视图控制器,然后连续调用这些行:
tableView.beginUpdates()
tablebleView.endUpdates()
这将告诉自动布局重新计算行高。
编辑: 检查我的答案 - 其中包括一个 link 到演示项目 - 此处:
我有一个 UITableViewCell
,底部有一个描述标签,如下所示:
点击描述标签可在 3
和 0
之间切换 numberOfLines
:
- (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];
}
当我点击标签时,行数确实发生了变化,但单元格没有扩展以适应新的行数。我该如何解决?
折叠(默认):
展开:
当单元格对其子视图进行布局时,table 视图实际上没有任何方式知道任何内容已更改。您必须手动告诉 table 视图重新计算。
您可能想要重新加载 table 视图,或者至少是发生更改的单元格。
查看 reloadData
以重新加载整个 table 视图,或者 reloadRowsAtIndexPaths:
如果您只想重新加载 Apple reference docs 中的特定索引。
您可以在 heightForRowAtindexPath: 中更新表格视图单元格高度。 调用 reloadRowsAtIndexPath 方法更新 UITableView 的单行。
self.dataTableView.beginUpdates()
self.dataTableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: UITableViewRowAnimation.automatic)
self.dataTableView.endUpdates()
如果您的约束设置正确,您不需要重新加载数据 --- 不需要整个 table,甚至不需要重新加载受影响的行。
最好的方法是将委托函数添加回您的 table 视图控制器,然后连续调用这些行:
tableView.beginUpdates()
tablebleView.endUpdates()
这将告诉自动布局重新计算行高。
编辑: 检查我的答案 - 其中包括一个 link 到演示项目 - 此处: