在iOS上使用带边框的UITableView圆角会影响性能问题

5

我在使用启用了cornerRadiusborderWidthborderColorUITableView时,发现了一些有趣的滚动性能问题。

self.tableView.layer.cornerRadius = 10.f;
self.tableView.layer.borderWidth = 1.0f;
self.tableView.layer.borderColor = [UIColor whiteColor].CGColor;

如果我移除 borderWidthborderColor,滚动将不会有任何问题,帧率可达60 FPS。只要我添加这两个属性到图层,帧率就会下降。
是否有人能提供建议或解释为什么会出现这种奇怪的行为?
非常感谢!

1
因为它需要更多的绘图操作。 - onegray
1
我认为是这样的。通过设置 borderWidthborderColor,它会添加额外的操作来绘制边框。cornerRadius 也是同理。 - onegray
为什么这会成为问题呢?因为边框不会滚动,只有单元格会滚动... - Borut Tomazin
你也有阴影吗? - Michał Zygar
嗯,我注意到在使用阴影(没有阴影路径)时性能大幅下降,但是使用这个方法从未出现过。你是用哪种方法设置的? - Michał Zygar
显示剩余3条评论
2个回答

6

CALayer拥有shouldRasterize属性,用于解决此类性能问题。只需设置

self.tableView.layer.shouldRasterize = YES;

这一行代码节省了我大量的时间和工作。

1

我刚刚发现cornerRadius和borderWidth会严重影响tableView的性能。所以我将10.f的半径改为了5.f,性能有了惊人的提升。虽然还不完美,但明显好了很多...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接