TabbarControllerのNavigationControllerでUIViewControllerを強制的に回転させる

私はビュー階層をこのように設定しました。

UITabBarController
    |
    UINavigationController
    |  |
    |  UIViewController
    |
    UINavigationController
       |
       UIViewController

私はViewControllerをポートレートでしか表示していないので、デバイスを横向きにして別のViewControllerが上にプッシュされるとすぐに意図したとおりに動作しています。

What I want now is that as soon as I push the back button on the newly popped ViewController that the old ViewController is being forced to Portrait, even though the Device is still in Landscape.
I have tried it with transitions, but then the other views are getting screwed and don't properly recognize there orientation anymore leading to a mess of displaced views.

0

3 答え

私のために働いたのは、

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

私のViewControllerで presentModalViewController を表示してください。 これにより、ビューは強制的にランドスケープに維持されます。 正確には私が望んでいたものではありませんでした。

2
追加された

元のView Controllerにこれを追加してみてください:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) return YES;
    return NO;
}

これにより、縦向きにのみ表示されます。

1
追加された
あなたは正しいかもしれませんが、私はモーダルビューコントローラでこれを使ったことがあります。
追加された 著者 Jonathan Ellis,
残念ながら、それはどちらも動作していません。デバイスはすでにランドスケープモードになっているため、おそらく「よく、その後はそのまま景観にとどまる」と考えるでしょう。唯一起こることは、これらの2つのビュー間の遷移アニメーションが間違っていることです(右から左にではなく上から下へ)
追加された 著者 muffe,

下のコードは、ビューをランドスケープモードに強制しますが、親ビューコントローラがランドスケープモードをサポートしている場合のみです。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

ランドスケープモードに強制したいビューの親ビューコントローラがポートレートのみの場合は、新しい新しいナビゲーションコントローラを作成する必要があります。これを行う最も簡単な方法は、強制ランドスケープビューコントローラをモーダルビューで表示することです。したがって、pushViewControllerの代わりにpresentModalViewControllerを使用してください。

1
追加された