1

最近、アプリのローテーションのサポートを追加していますが、それは苦痛です。かなり一貫して煩わしいと感じていることの1つは、横向きモードと縦向きモードの間で回転するたびに、ビューの1つが約50ピクセルほどシフトアップすることです。

私のランドスケープモードは実際には同じビューコントローラではありません。回転するときにビューコントローラを押します。ただし、後ろに回転すると、ポートレートのview.boundsをリセットする必要があります。そうしないと、ビューが上にシフトしてしまいます。

したがって、ローテーションコードでは、次のことを行う必要があります。

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    UIInterfaceOrientation toOrientation = self.interfaceOrientation;

    if ( self.tabBarController.view.subviews.count >= 2 )
    {
        if(toOrientation == UIInterfaceOrientationPortrait)
        {
            self.tabBarController.tabBar.hidden = NO;
            self.navigationController.navigationBar.hidden = NO;
            CGFloat height = [[UIScreen mainScreen] bounds].size.height;
            CGFloat width = [[UIScreen mainScreen] bounds].size.width;
            self.view.bounds = CGRectMake(0, -55, width, height);
        }
    }
}

確かにこれは正しくありえません。私のアプリには、ナビゲーションバーと標準のステータスバー(バットライフ、レセプションなど)がアプリの上部にあります。しかし...y座標の原点を負に設定しない限り、ビューが上にずれすぎているようです(これは意味がありません!)。

何が起こっていますか?

4

1 に答える 1

0

私のアプリでは、横向きモードに移行するときにタブバーとナビゲーションバーを非表示にします。バーを非表示にするステートメントは、ポートレートビューのビューコントローラのコードに書き込まれます。

ランドスケープモードからポートレートモードに戻ると、ランドスケープビューコントローラーがポップされ、奇妙なシフトビューが表示されます。これは、タブ/ナビゲーションバーの非表示を解除する順序が原因であることがわかりました。

タブ/ナビゲーションバーの非表示を解除するステートメントが縦向きのビューコントローラーにあったため、呼び出されるのが遅すぎました。タブ/ナビゲーションの非表示解除ステートメントを(ポートレートのビューコントローラーではなく)ランドスケープビューコントローラーの回転コードに移動した後、私の問題は解消されました。

于 2012-10-17T17:26:25.447 に答える