0

この質問が何度も出されていることは承知していますが、iOS7 の正しい実装を見つけるのに苦労しています。

サーバーから JSON データを取得する配列によって設定されたテーブルビューがあります。このデータは、任意の長さにすることができます。今のところ、1 行または 2 行しか取得できません。それ以上はありません。

heightForRowAtIndexPath正しい実装に関するヒントはありますか?

ありがとう

編集(現在のコード):

-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath {
// Retrieve the line for this index (from JSON)

NSString *line = [myArray objectAtIndex:indexPath.row];
CGSize size = CGSizeZero;

size = [line boundingRectWithSize: (CGSize){640, CGFLOAT_MAX} options: NSStringDrawingUsesLineFragmentOrigin
                             attributes: @{ NSFontAttributeName: [UIFont systemFontOfSize:18]} context: nil].size;
return ceilf(size.height);
}
4

1 に答える 1

0

heightForRowAtIndexPathこのようなものを適切に実装する必要があります

-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath {
    // Retrieve the line for this index (from JSON)
    NSString* line = ...

    // Measure it with UIKit
    // font is a UIFont* and should be prepared once when the view initialized
    // cellSize is a CGSize like (320, 10000), where 320 is the width of the cell, 10000 means we want it as high as needed
    CGSize sz = [line sizeWithFont:font constrainedToSize:cellSize lineBreakMode: NSLineBreakByWordWrapping];

    return sz.height;
}

の場合cellForRowAtIndexPath、ラベルをセル全体に合わせるだけです。

NSString UIKit Additions の詳細については、こちらを参照してください。このメソッド[sizeWithFont:constrainedToSize:lineBreakMode:]は iOS 7 で廃止され、別のメソッドに置き換えられていることに注意してください。ただし、その使用方法はわかりません :)

于 2013-10-28T00:08:44.517 に答える