0

私のアプリでは、4つのviewcontrollersがportraitモードで次から次へとナビゲートしますが、最後のviewcontrollerにcoverflowを追加し、シミュレーターが回転すると横向きになるはずです。ランドスケープでは、他のすべてのビューコントローラーも回転時にランドスケープになりますが、シミュレーターが回転していても、これらのビューコントローラーをポートレートにする必要があります。次のような多くのコードを試しました

    shouldAutorotate  and supportedInterfaceOrientations.

しかし、私が期待しているものに対する明確な解決策は得られません。アイデアがあれば、感謝します。

4

4 に答える 4

0

新しい Objective-C クラス (UINavigationController のサブクラス) を追加し、次のコードを .m ファイルに追加します。

-(NSUInteger)supportedInterfaceOrientations
 {
     NSLog(@"supportedInterfaceOrientations = %d ", [self.topViewController         supportedInterfaceOrientations]);

     return [self.topViewController supportedInterfaceOrientations];
 }

-(BOOL)shouldAutorotate
  {
     return self.topViewController.shouldAutorotate;
  }

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
  {
    // You do not need this method if you are not supporting earlier iOS Versions

    return [self.topViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
  }

新しいクラスを追加したら、ViewController クラスに移動し、次の変更を加えます。

- (BOOL)shouldAutorotate  // iOS 6 autorotation fix
  {
    return YES;
  }
- (NSUInteger)supportedInterfaceOrientations // iOS 6 autorotation fix
  {
      return UIInterfaceOrientationMaskAll;
  }

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation // iOS 6 autorotation fix
  {
      return UIInterfaceOrientationPortrait;
  }
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
  {
      return YES;
  }

ここに画像の説明を入力

shouldAutorotate で、 shouldAutorotateToInterfaceOrientation: ViewController が複数の向きをサポートするようにする場合は YES を返します。それ以外の場合は NO を返します。また、houldAutorotateToInterfaceOrientation: メソッドでも、その特定の ViewController に必要な Orintation を渡します。すべての View Controller に対して同じことを繰り返します。

これを行う理由:-

1: 任意の viewController の preferredInterfaceOrientationForPresentation: を特定の向きに変更できますが、UINavigationController を使用しているため、UINavigationController の supportedInterfaceOrientations もオーバーライドする必要があります。

2: UINavigationController の supportedInterfaceOrientations をオーバーライドするために、UINavigationController をサブクラス化し、UINavigation Orientation に関連するメソッドを変更しました。

それがあなたを助けることを願っています!

于 2013-05-03T07:38:40.370 に答える