我有来自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;
}
答案 0 :(得分: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属性。正如Apple所说,这个属性提供行高的非负估计可以提高加载表视图的性能。如果表包含可变高度行,则在加载表时计算所有高度可能会很昂贵。使用估计允许您将几何计算的一些成本从加载时间推迟到滚动时间。
创建自定义表格视图单元格时,需要设置此属性并使用约束来定义单元格的大小。
示例:
self.tableView.estimatedRowHeight = 44.0; //in your viewDidLoad method
示例:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; //in your cellForRowAtIndexPath method.
tableView:heightForRowAtIndexPath:
方法,则可以为单元格设置行高。示例:
self.tableView.rowHeight = UITableViewAutomaticDimension; //in your viewDidLoad method
对于这个问题可能有越来越多的解决方案(例如使用Core Text Framework或创建图层来使用GPU而不是CPU来卸载它等)。 你可以找到很多可能的解决方案here。请注意first one。
答案 1 :(得分:-1)
如果限制不是问题,您可以限制印地语字符以改善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]
}
}
希望这有帮助。