0

UITableViewカスタムセルがあります。タイトル、住所、郵便番号、電話番号、電子メール、ウェブサイト、および説明をセルに表示する必要があります。この情報はすべて Web サーバーから取得されます。Web サーバーからコンテンツを表示できます。ただし、内容が空だと本来あるべきところに隙間ができてしまい、説明が長すぎると全部を表示できません。サーバーからのコンテンツに応じてセルの高さを変更するにはどうすればよいですか? 助けてください。

例: 内容は次のように印刷されます: Title Address Zip Phone...

ただし、Address が nil の場合は次のようになります。

郵便番号...

メソッドはありtableview:heightForRowAtIndexPathますが、セルの内容に応じてセルの高さを更新できません。質問形式が悪くてすみません

4

4 に答える 4

2

セルのサイズ変更はかなり複雑になる可能性があるため、コンテンツに合わせてすべてのセルが自動的にサイズ変更される「Sensible TableView」などのテーブル ビュー フレームワークを使用することをお勧めします。無料版もあると思います。

于 2012-12-11T22:59:32.707 に答える
0

tableView:heightForRowAtIndexPath:呼び出しでは、欠落しているデータと、セルの残りのすべてを再レイアウトして、残っているギャップを埋める方法を考慮に入れる必要があります。したがって、実際の呼び出しはここでは重要です。

ただし、新しいFacebookアプリは、毎回電話をかける手間を省くために、ここで巧妙なトリックを実行します。ダウンロードした直後、コンテンツをユーザーにレンダリングする前に、バックグラウンドですべてのセルの高さを計算し、データ自体と一緒にデータストアに保存します。これは、アプリの実行/セルの再利用ごとにセルの高さとレイアウトを再レイアウト/再計算する必要がないため、実際のテーブルセルのレンダリングが非常に高速でスムーズであることを意味します。

于 2012-12-11T13:41:02.580 に答える
0

このデリゲート メソッドを使用して、すべてのセルの高さを設定できます

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
        {
           NSString *text = [yourArray objectAtIndex:indexPath.row];// here just use your data array which you get from server

           CGSize mTempSize = [text sizeWithFont:[UIFont fontWithName:fontName size:fontSize] constrainedToSize:constrainedToSize lineBreakMode:UILineBreakModeWordWrap];
           return mTempSize.height ;
       }

これがお役に立てば幸いです...

于 2012-12-11T13:22:46.990 に答える
0

まず、テキストの長さに応じてラベルのサイズを設定する必要があります。sizeWithFont文字列のサイズを取得するために使用できるメソッドは多数あります。Apple 開発者向けドキュメントを参照してください

単一行のラベルがある場合は、最も単純なものを使用できます– sizeWithFont:。ただし、複数行のラベルがある場合は、を使用する必要があります– sizeWithFont:constrainedToSize:。このメソッドを使用すると、ラベルの最大サイズを指定できます。

次に、セルの計算された高さを返す必要がありますtableView:heightForRowAtIndexPath:

これがお役に立てば幸いです。

于 2012-12-11T13:36:07.050 に答える