表格视图中的印地语文本滞后
Posted
技术标签:
【中文标题】表格视图中的印地语文本滞后【英文标题】:Hindi Text Lagging in tableview 【发布时间】:2016-06-01 12:41:02 【问题描述】:我有来自Web-service
的印地语文本列表并想在UILabel
中显示。
我正在尝试使用以下代码。
为了测试,我设置了静态文本,例如:
NSString *unicode=@"ये भी एक तमाशा है इश्क और मोहब्बत में... - ये भी एक तमाशा है इश्क और मोहब्बत में दिल किसी का होता है और बस किसी का चलता है.";
cell.lblPostContent.text = unicode;
这样的问题是...我的UITableview
滚动不顺畅。 UITableView
延迟太多。有什么方法可以用印地语正确显示此文本,并且还可以在 UITableView 上平滑滚动?
这是我的 cellForRowAtIndexPath………………
- (UITableViewCell *)tableView:(UITableView *)tableview cellForRowAtIndexPath:(NSIndexPath *)indexPath
cell=(GroupDetailCustomeCell*)[tableview dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell==nil)
cell=[[GroupDetailCustomeCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
NSString *unicode=[[post.postContent URLDecode] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if(unicode==nil)
unicode=[post.postContent stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if([post.postType isEqualToString:@"0"])
//textonly
cell.lblPostContent.text =unicode;
return cell;
【问题讨论】:
文本是印地语还是像 \uxxxx 这样的 unicode?span> @AshishKakkad 在英文文本中工作顺利,但在印地文文本中更加滞后...... 我有来自 web 服务的 unicode 相同的东西,即使是大文本也不会滞后,确保你有正确地重用单元格或任何其他在主线程上工作的东西,比如图像/缩略图下载等等。 @ChetanPrajapati 是的。我在想同样的问题可能是重复使用单元格。 @AshishKakkad cell=(GroupDetailCustomeCell*)[tableview dequeueReusableCellWithIdentifier:cellIdentifier]; if(cell==nil) cell=[[GroupDetailCustomeCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 【参考方案1】:tableView
组件是整个平台中最难学习的组件,因为 90% 的 ios 应用程序都是 tableView
中的数据。有很多事情可以提供这种不正确的行为。您可以尝试一些选项来修复它:
tableView
中此类问题的最常见原因是heightForRowAtIndexPath 方法。尝试覆盖它并计算那里的真实单元格高度。
例子:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
NSString *yourHindiText = [NSString stringWithString:@"some text"];
CGSize yourTextSize = [yourHindiText sizeWithFont:[UIFont fontWithName: @"SomeFont" size:someSize] constrainedToSize:kLabelFrameMaxSize];
return self.tableView.estimatedRowHeight + yourTextSize.height;
尝试为您的单元格使用estimatedRowHeight 属性。正如苹果所说,这个属性提供了对行高的非负估计,可以提高加载表格视图的性能。如果表格包含可变高度的行,则在表格加载时计算它们的所有高度可能会很昂贵。使用估算可以将几何计算的一些成本从加载时间推迟到滚动时间。
当您创建一个自定大小的表格视图单元格时,您需要设置此属性并使用约束来定义单元格的大小。
例子:
self.tableView.estimatedRowHeight = 44.0; //in your viewDidLoad method
-
如果仍然没有,请始终在 cellForRowAtIndexPath: 中使用 dequeueReusableCellWithIdentifier:forIndexPath: 方法。
例子:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; //in your cellForRowAtIndexPath method.
-
如果委托未使用 rowHeight 属性实现
tableView:heightForRowAtIndexPath:
方法,您可以设置单元格的行高。
例子:
self.tableView.rowHeight = UITableViewAutomaticDimension; //in your viewDidLoad method
对于这个问题可能有越来越多的解决方案(例如使用Core Text Framework 或创建层以使用 GPU 而不是 CPU 来卸载它等)。 你可以找到很多可能的解决方案here。请关注first one。
【讨论】:
我用like=>- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath return UITableViewAutomaticDimension; 【参考方案2】:如果限制不是问题,您可以限制印地语字符以改善UITableView
滚动延迟。
这是 swift 3 中限制的代码。
extension String
func limit(by:Int) -> String
let startIndex = self.startIndex
let endIndex = self.index(startIndex, offsetBy: by)
let range = Range(uncheckedBounds: (lower:startIndex , upper: endIndex))
return self[range]
希望这会有所帮助。
【讨论】:
以上是关于表格视图中的印地语文本滞后的主要内容,如果未能解决你的问题,请参考以下文章