我有一个带UITableViewCells的简单UITableView。对于tableview中的第0行,我为单元格设置了背景颜色。现在点击第0行我只想要扩展行。为了实现这一点,我使用与here描述相同的技术来改变第0行的高度。
现在的问题是细胞会膨胀和折叠,但每次处理都会在细胞上产生难看的闪烁/闪烁。我已经尝试了beginupdates / endupdates,并使用[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationNone];
点击时闪烁/闪烁的原因是什么?我怎么摆脱它呢?是的,我忘了提及,我已将单元格的选择样式设置为无。所以这不会造成这种情况。
答案 0 :(得分:5)
当使用单元格的非不透明背景颜色时,我遇到了同样的问题。解决方案是使用backgroundView
属性,而不是backgroundColor
:
UIView *backgroundView = [[UIView alloc] initWithFrame:cell.frame];
backgroundView.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.1f];
cell.backgroundView = backgroundView;
cell.backgroundColor = [UIColor clearColor];
答案 1 :(得分:4)
我有一个类似的问题,有几个罪魁祸首:
答案 2 :(得分:1)
如果您不想要动画并停止单元格闪烁,可以使用以下解决方案 -
[UIView setAnimationsEnabled:NO];
[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil]
withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
[UIView setAnimationsEnabled:YES];
重新加载单元格
时,上面的代码段在单元格上没有动画答案 3 :(得分:0)
我认为你不应该使用beginUpdate / endUpdates方法并在调用reloadData之前手动执行动画。单元格的最终状态(动画之后)是使用数据源定义的。 我希望这会对你有所帮助。
答案 4 :(得分:0)
我不确定这是否与我今天早上遇到的问题相同,但我的解决方案可能对某人有帮助......
我的子视图在重新加载动画期间消失了...... 如果我使用
,它不会消磨before_script:
- docker version
test:
stage: test
script:
- docker-compose -f docker-compose.yml build my_job
- docker-compose -f docker-compose.yml down
- docker-compose -f docker-compose.yml up --remove-orphans --force-recreate --abort-on-container-exit
或
[self.tableView beginUpdates];
[self.tableView endUpdates];
最后我发现我修改了单元格子视图的帧以计算合适的大小...我改变了它并开始使用其他视图进行计算,它解决了我的问题。
而不是:
[self.tableView reloadRowsAtIndexPaths:]
我以这种方式进行了计算:
self.leftLabel.frame = CGRectMake(0, 0, innerWidth, CGFLOAT_MAX);
[self.leftLabel sizeToFit];
答案 5 :(得分:-1)
我希望闪光灯是因为你没有选择动画,即UITableViewRowAnimationNone
。尝试淡入淡出动画。
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationFade]];
如果仍然看起来不太好,请尝试设置所有可见行的动画:
[self.tableView reloadRowsAtIndexPaths:[self.tableView indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationFade]];