2011-05-16 2 views
5

私はUINavigationControllerのナビゲーションバーには、常に、子ビューの原点は、タイトルバーの下にあったように、子ビューの高さを押し下げるだろうという印象の下にありました。その後、ルートビューの高さがナビゲーションバーを考慮しないのはなぜですか?

しかし、私は、このようなビューコントローラを提示...

MyViewController *viewController = [[MyViewController alloc] init]; 
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; 
viewController.title = @"My View Controller"; 
viewController.navigationItem.prompt = @"My Prompt"; 
viewController.delegate = self; 

[self presentModalViewController:navigationController animated:YES]; 
[navigationController release]; [viewController release]; 

...とviewDidLoadでのNSLogでself.view.frame.size.heightを確認し、それが私の見解は、640x460ピクセルの高いことを報告します。私のタイトル&プロンプトの高さを引いてはいけませんか?

+0

'viewWillAppear'に' self.view.frame.size.height'も記録しましたか?私の頭の上から離れて、典型的な動作は、ビューにプッシュされたときにのみ、VCのサイズを変更することです。 – lxt

+0

@lxtあなたは絶対に正しいです!私はそれを正しいとマークすることができるように、答えに書き直してください:) –

+0

喜んで私は助けることができました。下に書き直しました。 – lxt

答えて

18

、要求通り:あなたはviewDidLoadを呼び出すと

ビューコントローラがまだ画面にプッシュされていません。したがって、そのメソッド内からフレームサイズを取得すると、そのデフォルト(通常はiPhoneアプリの場合は320x480)がレポートされます。

ビューは、アカウントにナビゲーションバーを取るためにautoresizes。だから、viewWillAppearでフレームサイズを確認すると、それが正しいようになります。通常、これはiPhoneアプリの問題ではありません。あなたが複数の向きを持っているiPadアプリでは、ちょっと痛いかもしれません!

これまでいくつかの例外があります - 例えば、ニブを使用した場合。

3

おそらくが間違っていると思われます。selfここにあります。 selfMyViewControllerインスタンスを指す場合、おそらく460 - 44ピクセルの高さ(標準UIToolbarの高さ)を持ちますが、selfが親ビューコントローラ(ナビゲーションビューコントローラ自体など)を参照する場合は標準のビューの高さが表示されます(例えば460px)。

あなたは、例えば、MyViewControllerのインスタンス内self.view.frame.size.heightを呼び出すことによってこれを確認することができますビューの読み込みが終了したとき(viewWillAppear:メソッド)、そのナビゲーションコントローラによって既にサイズが変更されています。

self.view.frame.size.heightviewDidLoadメソッドから呼び出すと、ビューは親コントローラーによってまだサイズ変更されていない可能性があります。

もう一度試してみて、これはあなたの問題を修正する場合は私に知らせてください。だから、

+0

私はちょっと混乱しています。「viewDidLoad」か「viewWillAppear」のどちらにあっても、「自己」は同じではないでしょうか?それは確かに(私がviewWillAppear' 'で期待どおりに動作します)違いを生むんが、私はLXTは、上記のとおりビューはまだ、viewDidLoad''にリサイズされていないので、それはあると思います。 –

+0

はい、あなたは正しいです、 'self'はこれら2つの方法で同じです、私はあなたがどこか別の場所からそれを呼び出すと思っていました。 'viewWillAppear:'はビューが描画されると呼び出されます。したがって、既に正しい次元にサイズが変更されています。ちょうど答えを更新しました。 – marzapower

関連する問題