13

ここで非常に奇妙な問題があります。現在のモーダル ビュー コントローラーを使用して、ナビゲーション バーに配置されている ViewController の上に MFMailComposer ViewController を表示しています。

[self presentModalViewController:emailviewController animated:YES];

非表示にするには、使用します...

-(void) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{

    [self dismissModalViewControllerAnimated:YES];
}

すべて正常に動作しますが、MailComposer を閉じると、元のビュー コントローラーがステータス バーの後ろに隠れます。

setFrame メソッドを使用してビュー オフセットを 10 ずつ変更しようとしましたが、うまくいきませんでした。(これは、モーダル ビュー コントローラーが表示されて閉じられる前後で疲れます)

ステータスバーを一時的に非表示にしてみましたが、うまくいきませんでした。

self.navigationcontroller presentmodalviewcontrolle を試しましたが、うまくいきませんでした...

どんなアイデアや提案も大歓迎です

呼び出されたdismissmodalviewcontrollerの後

編集済み:ほとんどの人は、オフセットを手動で変更するよう提案してくれます。それはうまくいきません。元のviewcontrollerメソッドのviewDidLoad/viewWillapperでそれを行うと、現在のモーダルビューコントローラーの前にビューがシフトしますが、モーダルビューコントローラーをロードした後は正常になります。

  • (void) viewDidAppear: (BOOL) アニメーション { CGRect フレーム = self.navigationController.view.frame; frame.origin.y = 20; self.navigationController.view.frame = フレーム; }

オフセットを変更すると、次のようになります

4

1 に答える 1

3

これをViewDidAppearに入れてみてください:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];

最悪の場合、モーダル ビュー コントローラーが閉じられた後にのみ常に発生する場合は、.h で afterFirstLaunch のブール値を宣言し、これを viewDidAppear に配置します。

if(afterFirstLaunch){
      CGRect frame = self.navigationController.view.frame;
      frame.origin.y = 20;
      self.navigationController.view.frame = frame;
}
else {
      afterFirstLaunch = true;
 }
于 2012-07-21T06:31:51.253 に答える