1

私の iPad 上の TabBar ベースのアプリでは、UIViewController.presentViewController:animated:completion を呼び出して、モーダルなポップアップ ビューを表示する必要があります。

iOS5 ではこれで問題なく動作します。しかし、iOS6 では、デバイスが上下逆になっていると、ポップアップ ビューが上下逆に表示されます。ディスプレイの上から上下逆さまにアニメーションします。

デバイスが上下逆さまであると言うとき、LandscapeLeft (左側のボタン) と PortraitUpsideDown (上部のボタン) を意味します。他の 2 つの方向では、ポップアップは下から上にアニメーション化され、予想どおり右側が上になります。

この問題は、アプリで使用している 3 つのポップアップ ビューすべてで発生します。そのうちの 2 つは UIViewController のサブクラスで、3 つ目は MFMailComposeViewController です。

ビューを表示するには、次のようなコードを使用します。

MyModalViewController * tmpModal = [[MyModalViewController alloc] init];
tmpModal.modalPresentationStyle = UIModalPresentationFormSheet;
tmpModal.contentSizeForViewInPopover =  CGSizeMake(350,450);

[self.tabBarController presentViewController:tmpModal
                                    animated:TRUE
                                  completion:^
                                        {


                                        }];

iOS6 回転デリゲート メソッドを 2 つの UIViewController ベースのビューに追加しましたが、効果はありませんでした。

いいえ:

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

それは少しも役に立ちませんでした。

この問題を経験したのは私だけでしょうか?

4

1 に答える 1

0

問題は私の UITabBarController サブクラスにあることが判明しました。「interfaceOrientation」の getter メソッドを誤って上書きしてしまいました。その名前の getter を作成しましたが、(void) メソッドのように呼び出しました (戻り値を見ずに)。このメソッドは、現在の向きを含むアプリ全体の変数を更新することを目的としており、UIDeviceOrientationDidChangeNotification 通知のオブザーバーである viewDidRotate というメソッドから呼び出しました。

代わりに「saveInterfaceOrientation」と呼ばれるようにメソッドを変更し(そして無効にしました)、問題はなくなりました。

于 2012-10-21T21:11:54.070 に答える