-6

iOS のテーブル ビューが必要です。各セルには、1 から 10 (最大) の範囲の異なるセル コンテンツがあります。コンテンツのサイズに基づいてセルのサイズを自動的に変更したい。

役に立たなかった既存のソリューションをいくつか試しました。

これについて何か助けはありますか?またはオープンソース

4

4 に答える 4

2

通常、これは、特定のコンテンツに必要な高さを計算するクラス メソッドをセル クラスに持つことによって行われます。heightForRowAtIndexPath次に、テーブルビュー デリゲート メソッドでこのクラス メソッドを呼び出し、そのインデックス パスに使用されるクラス メソッドにコンテンツを渡します。そのようです:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

Event* event = self.events[indexPath.row];

return [EventCell cellHeightForEvent:event];
}

sizeWithFontセルの高さクラスのメソッドでは、表示したい NSString のようなメソッドを使用して、コンテンツのサイズを把握できます。

+ (CGFloat)cellHeightForEvent:(Event *)event {

    CGSize textSize = [event.title sizeWithFont:[UIFont fontWithNameB:@"Helvetica" size:12] constrainedToSize:CGSizeMake(67, MAXFLOAT)];

    CGFloat paddedHeight = textSize.height + 22;

    CGFloat min = 46;

    return MAX(min, paddedHeight);
}

これにより、コンテンツに基づいて行の高さが動的になります。layoutSubviews新しい行ごとにコンテンツのサイズが正しくなるように、セルのビューのサイズを適切に変更する必要があることに注意してください。

注:特定のサイズを特定のインデックスパスにハードコーディングすることを示唆する上記の回答は、非常に悪い解決策です。データ要素の数または順序がわからない場合、このソリューションは不可能になります。また、データ セットが (数または順序で) 変更された場合は、前に戻ってインデックス パスを再コーディングし、再度正しいものにする必要があります。私が提供したソリューションは、異なるデータ セットまたは動的データ セット用にリファクタリングする必要はありません。

于 2013-10-29T15:42:26.017 に答える
1

これはあなたが探しているものです:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 10.0f;
}

indexPath に基づいて、異なる高さを返すことができます。

于 2013-10-29T15:37:43.773 に答える
0

カスタム UITableViewCell サブクラスを作成し、セルをレイアウトし、同じロジックを使用して、上記のデリゲート メソッドで rowHeight を計算します

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
//calculate the height of your custom cell based on indexPath
return customCellHeightForRowAtIndexPath;
}
于 2013-10-29T15:43:18.727 に答える