所有,我试图在UITableView单元格中为UILabel创建折叠和扩展效果。要求是首先显示2行文本,然后点击按钮以显示其余部分。
我想到的第一个想法是重置UILabel的 numberOfLines 属性,然后重新加载该行的TableView。
但是,无论我使用 reloadRowAtIndex 还是删除/插入,我都会遇到一种奇怪的行为,如下所示。
以下代码将导致我第一次点击按钮时,它会调用setSelect:YES,但是按钮结果仍然没有被选中,并且行执行重新加载动画但是没有正确的高度,只有在我再次点击后,按钮才会被选中,单元格将获得正确的高度。
在崩溃模式下,我只是简单地调用了#34; reloadData "对于整个表,它按预期工作,正确的高度,正确的numberOfLines。我想使用 reloadAtIndexPath 方法,因为它给了我动画选项。但是在使用它时我无法找出我做错了什么,任何人都可以提供帮助吗?
- (IBAction)actionTapOnExpandButton:(id)sender {
NSIndexPath *path = sender.path // Get Path.
UITableViewCell *cell = [_tableView cellForRowAtIndexPath:buttonCellIndexPath];
if(!buttonTapped.selected){
cell.videoDescriptionLabel.numberOfLines = 0;
[_tableView beginUpdates];
[_tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:buttonCellIndexPath, nil] withRowAnimation:UITableViewRowAnimationFade];
[_tableView insertRowsAtIndexPaths:[NSArray arrayWithObjects:buttonCellIndexPath, nil] withRowAnimation:UITableViewRowAnimationFade];
[_tableView endUpdates];
[buttonTapped setSelected:YES];
}
else {
cell.videoDescriptionLabel.numberOfLines = 2;
[_tableView reloadData];
[buttonTapped setSelected:NO];
}
}
这里我实现了高度方法
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}
在表init中,我有
_tableView.estimatedRowHeight = 44;
答案 0 :(得分:1)
对于按钮的'延迟选择问题':
在您的操作方法buttonTapped.selected
中尝试切换if
值之前 [buttonTapped setSelected: !buttonTapped.selected];
语句,并从if
中删除相同的方法调用当然,还有else
个大括号。正如我所说,这可能会解决按钮问题。
对于'延迟细胞高度问题':
我建议在beginUpdates
电话之前将标签尺寸设为无效,将<{strong>设置为numberOfLines
之后设置为0
。试试[cell.videoDescriptionLabel sizeToFit];
希望这会有所帮助。