gpt4 book ai didi

uitableview - 为什么具有 UISegmentedControl 对象的自定义表格 View 单元格的滚动性能较差?

转载 作者:行者123 更新时间:2023-12-02 22:35:00 25 4
gpt4 key购买 nike

我有一个 UITableView,其中包含在 xib 文件中定义的自定义单元格,当单元格上有 UISegmentedControl 时,我的设备上的滚动性能很差(不稳定)。 NSLog 语句显示单元格正在按其应有的方式进行分配和重用。我的 cellForRowAtIndexPath 方法的代码如下。按照 Apple 文档在 xib 中进行连接。 (顺便说一句,在模拟器中滚动顺利)

- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *MyIdentifier = @"MyIdentifier";

UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:MyIdentifier];

if (cell == nil)
{
[[NSBundle mainBundle] loadNibNamed:@"TableViewCell"
owner:self
options:nil];
cell = self.tvCell;
self.tvCell = nil;
}

cell.layer.shouldRasterize = YES; // build error is here

UILabel *lbl = (UILabel *)[cell viewWithTag:1];

[lbl setText:[NSString stringWithFormat:@"Q%i", indexPath.row+1]];

return cell;
}

最佳答案

表格单元格在滚动时必须执行的任何绘图都会导致性能问题;当您有很多 subview 时,往往会进行大量绘图,正如您所观察到的那样,这将使您的滚动变得相当不稳定。有几种方法可以尝试减少这种情况。

第一步是确保单元格本身及其尽可能多的 subview 将其 opaque 属性设置为 YES。不透明 View 不必与它们下面的内容混合,这样可以节省大量时间。

您可能还想设置单元格的图层以对其进行栅格化,如下所示:

cell.layer.shouldRasterize = YES;
cell.layer.rasterizationScale = [UIScreen mainScreen].scale;

这会将您的 View 层次结构折叠成一个平面位图,这正是 Core Animation 喜欢绘制的东西。请注意,任何动画 View (例如事件指示器)都会强制该位图在每次更改(即很多更改)时进行更新。在这种情况下,您不希望单元格栅格化所有内容;您可能只是在另一个具有任何此类动态内容的 subview 下使用包含所有相对静态 View (例如标签)的 subview ,并且仅对其中的第一个进行光栅化。

关于uitableview - 为什么具有 UISegmentedControl 对象的自定义表格 View 单元格的滚动性能较差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3248201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com