印地语文本滞后于tableview

时间:2016-06-01 12:41:03

标签: ios objective-c xcode uitableview uilabel

我有来自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;
}

2 个答案:

答案 0 :(得分:1)

tableView组件是整个平台中最难学的组件,因为90%的iOS应用程序是tableView中的数据。有很多东西可以提供这种不正确的行为。您可以尝试其中一些选项来解决它:

  1. tableView中此类问题的最常见原因是heightForRowAtIndexPath方法。尝试覆盖它并计算那里的真实细胞高度。
  2. 示例:

    - (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;
    }
    
    1. 尝试为您的单元格使用estimatedRowHeight属性。正如Apple所说,这个属性提供行高的非负估计可以提高加载表视图的性能。如果表包含可变高度行,则在加载表时计算所有高度可能会很昂贵。使用估计允许您将几何计算的一些成本从加载时间推迟到滚动时间。

      创建自定义表格视图单元格时,需要设置此属性并使用约束来定义单元格的大小。

    2. 示例:

      self.tableView.estimatedRowHeight = 44.0; //in your viewDidLoad method
      
      1. 如果您还没有dequeueReusableCellWithIdentifier:forIndexPath:,请始终使用cellForRowAtIndexPath:方法。
      2. 示例:

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; //in your cellForRowAtIndexPath method.
        
        1. 如果委托没有使用rowHeight属性实现tableView:heightForRowAtIndexPath:方法,则可以为单元格设置行高。
        2. 示例:

          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]
    }
}

希望这有帮助。