Objective c UITableView在使用非英语(阿拉伯语、汉语、希伯来语、乌尔都语等)文本时滚动缓慢
我正在使用iOS 5并制作一个iPad应用程序。我的应用程序中有一个UITableView,其中每个单元格都包含一个UITextView。但是,当非英语文本加载到文本视图时,它会经历非常缓慢的滚动 这是我创建的一个示例项目,用于演示该问题。这将使用UITableView,其中每个UITableViewCell中都有一个带有标记1的UITextView。它的滚动速度非常慢:Objective c UITableView在使用非英语(阿拉伯语、汉语、希伯来语、乌尔都语等)文本时滚动缓慢,objective-c,ios,uitableview,scroll,Objective C,Ios,Uitableview,Scroll,我正在使用iOS 5并制作一个iPad应用程序。我的应用程序中有一个UITableView,其中每个单元格都包含一个UITextView。但是,当非英语文本加载到文本视图时,它会经历非常缓慢的滚动 这是我创建的一个示例项目,用于演示该问题。这将使用UITableView,其中每个UITableViewCell中都有一个带有标记1的UITextView。它的滚动速度非常慢: - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableV
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 20;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"BasicCellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UITextView *textView = (UITextView *)[cell viewWithTag:1];
textView.text = @"أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة. أَبْجَدِيَّة عَرَبِيَّة.";
return cell;
}
我已经使用了NSLog来验证这一行是否单独导致了减速。删除它会使一切工作完美,但我需要设置文本。我已经阅读了所有关于性能调整的资料,但这对我来说仍然是一个巨大的问题
滚动速度慢只是阿拉伯语、汉语、希伯来语等语言的一个问题。与英语、法语、德语(可能与字符集或unicode有关?)相比,5000个字符的英语字符串根本没有速度慢,但200个字符的阿拉伯语字符串却有速度慢
谢谢你的帮助 这里延迟执行的似乎是在可编辑的UITextView中设置长文本 根据讨论,将UITextView设置为不可编辑可提高性能
我建议将其设置为不可编辑,也许稍后将其更改为可编辑这里延迟执行的似乎是在可编辑的UITextView中设置长文本 根据讨论,将UITextView设置为不可编辑可提高性能
我建议将其设置为不可编辑,也许稍后将其更改为可编辑阿拉伯长字符串是静态的还是动态的(如从服务器中提取)?字符串是动态的,但在UITableView开始绘图之前已完全加载。在渲染/绘制单元格的过程中,它们根本不会更改。是否要求使用500字符字符串填充单元格?你不能只显示其中的一部分吗?在这种情况下不能,因为用户可以在直接加载到任何行的文本视图中后进行更改。该部分已经针对性能进行了优化,不过为了研究当前问题,我在代码中禁用了该功能,直到解决了滚动速度慢的问题。出于我们的目的,它正在加载全文(请注意,它不需要执行调整大小操作,因为所需的高度已被缓存)。阿拉伯文必须绝对轰炸文本渲染器。。。我想知道您是否可以在核心文本中执行此操作。阿拉伯文长字符串是静态的还是动态的(如从服务器中提取)?字符串是动态的,但在UITableView开始绘图之前已完全加载。在渲染/绘制单元格的过程中,它们根本不会更改。是否要求使用500字符字符串填充单元格?你不能只显示其中的一部分吗?在这种情况下不能,因为用户可以在直接加载到任何行的文本视图中后进行更改。该部分已经针对性能进行了优化,不过为了研究当前问题,我在代码中禁用了该功能,直到解决了滚动速度慢的问题。出于我们的目的,它正在加载全文(请注意,它不需要执行调整大小操作,因为所需的高度已被缓存)。阿拉伯文必须绝对轰炸文本渲染器。。。我想知道你是否可以在核心文本中这样做。不幸的是,这在阿拉伯语中对我不起作用。它可以完美地用英语书写任何数量的文本,但不能用阿拉伯语。你是对的,我刚刚用UITextView测试了它,它确实很慢:这里的问题是,你正在使用UITextView,当从UI线程中调用它时,它会变慢,所以我认为你不能做得更快,您必须实现一个编辑文本的详细视图。我刚刚偶然发现了一件事:如果我在设置文本之前设置textView.editable=NO,然后将其设置回yes,那么根据我的NSLog测试,性能将提高约300%。也许有一种方法可以使用这些黑客作为解决方法?如果代码中仍然有NSLog,请删除它们。他们将是经济放缓的一大部分。不幸的是,这在阿拉伯语中对我不起作用。它可以完美地用英语书写任何数量的文本,但不能用阿拉伯语。你是对的,我刚刚用UITextView测试了它,它确实很慢:这里的问题是,你正在使用UITextView,当从UI线程中调用它时,它会变慢,所以我认为你不能做得更快,您必须实现一个编辑文本的详细视图。我刚刚偶然发现了一件事:如果我在设置文本之前设置textView.editable=NO,然后将其设置回yes,那么根据我的NSLog测试,性能将提高约300%。也许有一种方法可以使用这些黑客作为解决方法?如果代码中仍然有NSLog,请删除它们。它们将是经济放缓的一大部分。