gpt4 book ai didi

ios - 糟糕的 UITableView 滚动性能问题 iOS 7

转载 作者:可可西里 更新时间:2023-11-01 04:10:52 33 4
gpt4 key购买 nike

我有一个包含 20 多行的 UITableView,每个 UITableViewCell 包含一个 UITextView,我可以在其中设置不同的 UIFont、对齐方式和颜色。当我向下或向上滚动时,滚动过程中会出现断断续续或滞后的情况,当我删除字体和文本颜色并对齐时,一切都会变得完美。 Apple 是否更改了 iOS 7 中重绘文本的方式?以前的 iOS 版本不会发生这种情况。

仪器显示消耗的时间在dequeueReusableCellWithIdentifier:forIndexPath:

-- 更新添加代码

if (unit.fontName != nil ) {
textView.font = [UIFont fontWithName:unit.fontName size:unit.fontSize.floatValue];
}
if (unit.fontColor) {
textView.textColor=[self convertString:unit.fontColor];
}
else {
textView.textColor=[UIColor colorWithRed:0 green:0 blue:0 alpha:1];
}
if ([unit.fontSize floatValue] !=0) {
textView.font = [UIFont fontWithName:textView.font.fontName size:[unit.fontSize floatValue]];
}
if (unit.textAlignment) {

switch ([summaryUnit.textAlignment intValue]) {
case 0:
textView.textAlignment = NSTextAlignmentLeft;
break;

case 1:
textView.textAlignment = NSTextAlignmentCenter;
break;

case 2:
textView.textAlignment = NSTextAlignmentRight;
break;

default:
break;
}

}

最佳答案

在 UITableView 的幕后发生了很多事情,这可能无法说明为什么它看起来没有响应。

例如,您不应该在 tableView:heightForRowAtIndexPath: 中做大量工作,因为 UITableView 需要询问数据集中每一行的高度,无论它们是否明显在屏幕上或不在屏幕上。它这样做是为了确定内容大小。

导致问题的可能根本不是您的数据或您的单元格。具有大量 subview 的复杂单元格可能在合成器中呈现缓慢。特别是如果你有透明度之类的东西。

因此,每当我实现 UITableView 时,我总是为自己制定四个基本规则。

1) 始终知道在重新加载数据时需要告诉 TableView 什么。不要在数据源或委托(delegate)方法中做很多事情。在 UITableView 需要时准备好一切。

2) 不要在滚动周期中销毁和创建 View 。这样一来,您不应该创建新的 UIView(或其他任何东西)——例如在您的 prepareForReuse 方法中。只需重置现有 View 和控件的内容,然后在 UITableView 要求您时重新配置它们。

3) 单元格中不要有复杂的 View 层次结构。尤其是需要渲染的透明度和越界内容,对于合成器来说要以足够快的速度渲染会很麻烦。

4) 不要在 tableView:cellForRowAtIndexPath: 中配置单元格。只需出队并返回所需的单元格。始终在 tableView:willDisplayCell:forRowAtIndexPath: 委托(delegate)方法中配置和设置单元格。

话虽这么说,但还是有一些技巧可以帮助您。正如我上面提到的,不要在单元格的 prepareForReuse 方法中创建和销毁 View 或控件。根本不要做重量级的工作。只需重置您的 View 并继续。 这听起来像是您正在做的事情,因为它是 dequeueReusableCellWithIdentifier:forIndexPath: 导致您遇到麻烦的原因。

最后,如果是因为合成(Instruments 会在某些与 Quartz 相关的方法中显示工作),您可以通过使用单元格 CALayer 的 shouldRasterizerasterizationScale 来成功。这有时可以加快相当大的单元格渲染速度。

让我知道这些东西是否有意义,以及它是否可以解决您的问题。

编辑:

附言。是的。 Apple 确实更改了 iOS 7 中的文本呈现。但是你为什么要使用 UITextView?!?我不太了解它,但我知道它比 UITextField 或 UILabel 重量级得多。也许你可以考虑改用那些。 UITextView 通常用于编辑类似于文档的内容(如 Notes 应用程序)。 我真的认为这可能是造成您麻烦的原因。

关于ios - 糟糕的 UITableView 滚动性能问题 iOS 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22784214/

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