8
  func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{

    let json = JSON(data: activityTableView.onlineFeedsData)[indexPath.row] // new
    if(json["topic"]["reply_count"].int > 0){
        if let cell: FeedQuestionAnswerTableViewCell = tableView.dequeueReusableCellWithIdentifier(kCellIdentifier_reply) as? FeedQuestionAnswerTableViewCell{

            cell.selectionStyle = .None
            cell.tag = indexPath.row
            cell.relatedTableView = self.activityTableView
            cell.configureFeedWithReplyCell(cell, indexPath: indexPath, rect: view.frame,key: "activityTableView")
            // Make sure the constraints have been added to this cell, since it may have just been created from scratch
            cell.layer.shouldRasterize = true
            cell.layer.rasterizationScale = UIScreen.mainScreen().scale

            return cell
        }
    }else{
        if let cell: FeedQuestionTableViewCell = tableView.dequeueReusableCellWithIdentifier(kCellIdentifier) as? FeedQuestionTableViewCell{

            cell.selectionStyle = .None
            cell.tag = indexPath.row
            cell.relatedTableView = self.activityTableView
            cell.configureFeedCell(cell, indexPath: indexPath, rect: view.frame)
            // Make sure the constraints have been added to this cell, since it may have just been created from scratch

            cell.layer.shouldRasterize = true
            cell.layer.rasterizationScale = UIScreen.mainScreen().scale
            return cell
        }
    }


    return UITableViewCell()
}

各セルの高さには 200 ~ 400 の差があるので、高さの計算を に実装してみましたestimatedHeightForRowAtIndexPath

メソッドで高さをキャッシュしwillDisplayCellますが、それでもレンダリングに時間がかかるようにスクロールがジャンプします。

セルは、高さが可変のテキストと画像を含む多くの動的データを含む Facebook カード型のレイアウトのようなものです。

4

2 に答える 2

0

これを試してみてください。これがお役に立てば幸いです。それは私のために働いた。実際には、これは表示前にセルの高さを計算します。ありがとう。

NSMutableDictionary *cellHeightsDictionary;

// これを viewDidLoad に入れます

cellHeightsDictionary = @{}.mutableCopy;

// UITableview デリゲート メソッド

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
NS_AVAILABLE_IOS(7_0)
{
    NSNumber *height = [cellHeightsDictionary objectForKey:indexPath];
    if (height) return height.doubleValue;
    return UITableViewAutomaticDimension;
}

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cellHeightsDictionary setObject:@(cell.frame.size.height) forKey:indexPath];

}
于 2017-01-12T07:04:19.347 に答える
0

各セルの高さを計算できる場合は、estimatedRowHeightAtIndexPath プロパティの代わりに tableView(_:heightForRowAtIndexPath) を使用してください。EstimatedRowHeightAtIndexPath は、主にセルのセルサイズ調整などの機能で使用されます。

于 2016-03-06T19:04:41.317 に答える