2010-12-16 1 views
3

私はUITableViewControllerのフローを理解するのに苦労しています。私はもちろんのtableViewを収容tableViewControllerを持ってheightForRowAtIndexPathは常に2回呼び出されます

:基本的にここに私の構造です。ここでは、getCellContentViewとcellForRowAtIndexPathを使用して、自分のセルに関連するすべての作業を行います。私のセルには、それぞれの向きのフレームが1つずつある、少数のUILabelsがあります。私はオリエンテーションの変更とフレームの再描画を正しく検出して実行します。問題はありません。ここまでは順調ですね。

は、今私は景観のために100を返すと、縦向きのための200を言うためにheightForRowAtIndexPathを必要としています。私の問題は、NSLogを内部に置くと、tableViewを回転させるときに何らかの理由でメソッドが2回呼び出されるということです。誰かが、なぜそのメソッドが回転で2回起動されるのか知っていますか?私は、-reloadDataが問題になるかもしれないと思っていました。私はwillRotateToInterfaceOrientationメソッドの中で一度だけ-reloadDataを呼び出し、コード内ではどこにも呼び出されません(最初のviewDidLoad呼び出し内を除く)。

なぜ、各回転イベントでheightForRowAtIndexPathが2回呼び出されるのですか?また、heightForRowAtIndexPathも、回転が始まるときに向きを正しく判別できないようです。ステータスバーの向きプロパティを使用して、heightForRowAtIndexPathの内部をチェックし、適切なセルの高さを返します。どんな助けも素晴らしいだろう!それは呼ばれていた回数を気に

答えて

0

:)

heightForRowAtIndexの実装では:それは望んでいる時はいつでもテーブルビューはそれを呼び出すことができますし、それは問題ではないことを十分に高速である必要があります。私は推測していた場合

はしかし、回転が(didAnimateFirstHalfOfRotationToInterfaceOrientationを見て:などのUIViewControllerのマニュアルを参照。)2つの段階で行われますがrotatinoの間のUIKitののUITableViewControllerクラスによって行われているものは考えている - 多分それはさわやかですあなたのためのテーブルビュー自体? - あなたがしたいセルの高さを設定することを使用することができますあなたが回転している方向にあなたを与えるべきである:

あなたがwillRotateToInterfaceOrientationをオーバーライドしようとしたことがありますか?このような

何か:(!警告、テストされていないとメモリから入力された)

- (NSInteger)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    return rowHeight; 
} 

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration { 
    [super willAnimateRotationToInterfaceOrientation:interfaceOrientation duration:duration]; 

    rowHeight = (UIInterfaceOrientationPortrait == interfaceOrientation) ? 100 : 200; 
    [tableView reloadData]; 
} 
+0

氏deanWombourne、私はあなたを愛して!働いた!現在、テーブルが2回レンダリングされる理由(2回のreloadData呼び出しが行われた場合のように)を実際に調べるために、回転内部を読み込みます。 – user511872

関連する問題