3

I have a UITabBarViewController in portrait mode where I push a modalViewController in landscape. The rotation changes to landscape when I push the modal, but when I dismiss it the orientation remains in landscape instead of reverting to portrait.

Code:

a CustomUINavigationController for the landscape mode:

- (BOOL)shouldAutorotate
{
  return [[self.viewControllers lastObject] shouldAutorotate];
}

- (NSUInteger)supportedInterfaceOrientations
{
  return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
  return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}

the uitabbarcontroller

- (BOOL)shouldAutorotate
{
  if ([self inModal]) {
    UINavigationController *nav = (UINavigationController *)self.modalViewController;
    return [[nav.viewControllers lastObject] shouldAutorotate];
  } else {
    return NO;
  }
}

-(NSUInteger)supportedInterfaceOrientations
{
  if ([self inModal]) {
    UINavigationController *nav = (UINavigationController *)self.modalViewController;
    return [[nav.viewControllers lastObject] supportedInterfaceOrientations];
  } else {
    return UIInterfaceOrientationPortrait;
  }    
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
  if ([self inModal]) {
    UINavigationController *nav = (UINavigationController *)self.modalViewController;
    return [[nav.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
  } else {
    return UIInterfaceOrientationPortrait;
  }
}

- (BOOL)inModal
{
  if (self.modalViewController && [self.modalViewController isKindOfClass:[UINavigationController class]]) {
    return YES;
  } else {
    return NO;
  }    
}

If I set shouldRotate to YES I get an error: * Terminating app due to uncaught exception 'UIApplicationInvalidInterfaceOrientation', reason: 'Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES. Even though I have set the two orientations in UISupportedDeviceOrientations.

4

1 に答える 1

6

あなたの問題はこの行が原因だと思います(コードに2回あります):

return UIInterfaceOrientationPortrait;

私は現在、s.thをやろうとしています。あなたが達成しようとしているものと同様で、ここで私の質問をしました: iOS 6 自動回転の問題 - supportedInterfaceOrientations の戻り値は尊重されません

コードの問題は、2 つのメソッドがインターフェイスの向きを返すのではなく、許可された向きまたは優先される向きの組み合わせをビットにエンコードするマスクを返すことです。

これを試して:

return UIInterfaceOrientationMaskPortrait;

UIInterfaceOrientationPortrait私が知る限り 0 にマップされているため、インターフェイスの向きの空のセット (なし) として解釈されます。

于 2012-09-23T18:58:50.013 に答える