2

iOS5とストーリーボードを使用しUITableViewて、内でホストされているホストの高さをプログラムでサイズ変更しようとすると問題が発生します。UIViewControllerVCは、詳細レコードを表示するマスター/詳細レコードスタイルをUITableView表示します。表示されるマスターレコードのタイプによっては、画面の下部に一連のボタンが必要になる場合があります。ボタンが不要な場合はUITableView、使用可能なスペースを活用するために、ボタンの高さを拡張したいと思います。私は次のコードを使用しています:

CGRect tableFrame = [tableListView frame];
if (blnApprovalRec == YES)
    tableFrame.size.height = 127;
else
    tableFrame.size.height = 170;
[tableListView setFrame:tableFrame];

このコードは、画面が最初に読み込まれるときを含め、マスターレコードが変更されるたびに呼び出されますviewDidLoad。問題は、VCがロードされるときに、UITableView指定されたサイズを使用してペイントしないことです。つまり、IBのデフォルトサイズでペイントするだけです。ユーザーがマスターレコードを変更してテーブルが再ロードされると、すべてが正常に機能し、必要に応じてサイズが変更されます。setNeedsDisplayを使用しsetNeedsLayoutて強制的に再描画を試みましたreloadDataが、いずれも機能しませんでした。

4

5 に答える 5

11

問題は、VC が読み込まれるときに、指定されたサイズを使用して UITableView が描画されないことです。

これは、テーブル ビューが読み込まれたときに発生しますが、UI が更新されていません。viewDidLoad や viewWillAppear で強制的に呼び出していないか確認してください。

うまくいけば、このコードは別の方法である:

CGRect tableFrame = [tableListView frame];
if (blnApprovalRec == YES)
   tableFrame.size.height = 127; 
else
   tableFrame.size.height = 170; 
[tableListView setFrame:tableFrame];

ビューが最初に表示されるとき、マスター レコードからデフォルトで選択された値を持っている場合があります。viewWillAppear の呼び出し関数でその値/インスタンスを設定できます。

上記のコードスニペットを強制的に呼び出す方法について、メソッド名とコードを表示できますか?

于 2012-08-17T09:49:19.103 に答える
4

コードを移動するだけで同じ問題が発生しました

   - (void) viewDidLoad

   - (void)viewDidAppear:(BOOL)animated 
于 2014-02-17T02:46:33.773 に答える
2

これはトリッキーで、動的にサイズを変更するのは難しいです。

テーブルに「setNeedsLayout」と「setNeedsDisplay」を試し、画面を強制的に再描画します。

それ以外は、最小サイズにストーリーボードし、コードを使用して拡張します。

通常、アップルは私たちがこれを行うことを好みません。可能であれば、別のビュー内のビューの上部にボタンを描画する必要があります。

申し訳ありませんが、これ以上正確には言えませんが、ハックをいじったり、サイズ変更や再設計をあきらめたりすることで、これらの問題をすべて解決しました。どうやって行くのか教えてください:)

于 2012-08-17T09:37:27.100 に答える
1

テーブルがロードされた後にフレームを設定していることを確認してください。

そのコードをどのメソッドで呼び出しますか?

于 2012-08-17T09:38:25.430 に答える