3

我有一个UITabBarViewController纵向模式,我按modalViewController横向模式。当我推动模式时,旋转变为横向,但是当我关闭它时,方向保持在横向而不是恢复为纵向。

代码:

aCustomUINavigationController用于横向模式:

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

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

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

uitabbar 控制器

- (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;
  }    
}

如果我将 shouldRotate 设置为 YES,我会收到错误消息:* 由于未捕获的异常“UIApplicationInvalidInterfaceOrientation”而终止应用程序,原因:“支持的方向与应用程序没有共同方向,并且 shouldAutorotate 返回 YES。即使我在 UISupportedDeviceOrientations 中设置了两个方向。

4

1 回答 1

6

我认为您的问题是由这一行引起的(您的代码中有两次):

return UIInterfaceOrientationPortrait;

我目前正在尝试做某事。类似于您尝试实现的目标,并在这里提出了我的问题:iOS 6 auto rotation issue - supportedInterfaceOrientations return value not respected

您的代码的问题在于这两种方法不返回接口方向,而是在其位中编码允许或首选方向的组合的掩码。

试试这个:

return UIInterfaceOrientationMaskPortrait;

UIInterfaceOrientationPortrait据我所知,它被映射到 0,因此被解释为空的界面方向集(无)。

于 2012-09-23T18:58:50.013 回答