在某些控制器中禁用横向方向时,启动横向应用程序会扭曲整个应用程序

时间:2014-11-20 22:19:15

标签: ios objective-c iphone swift screen-orientation

我在我的应用中使用导航控制器。我希望我的所有viewController都只是纵向,除了一个,它将支持横向。

在Stack Overflow中使用已接受的答案我将我的导航控制器子类化并包含以下代码:

iOS 6 - Navigation Controller Landscape Rotations For Some Views While Others Portrait Only

- (BOOL)shouldAutorotate {
    id currentViewController = self.topViewController;

    if ([currentViewController isKindOfClass:[IssueViewController class]])
    return YES;

    return NO;
  }

-(NSUInteger)supportedInterfaceOrientations {
   return UIInterfaceOrientationMaskAll; 
 }

这会挑出我想要旋转的一个视图控制器。除非我在横向上启动应用程序,否则一切都很有效。图像被压碎并偏离中心。

屏幕截图:http://imgur.com/a/jyrJ2

有关纠正此事的任何建议吗?谢谢!

1 个答案:

答案 0 :(得分:0)

测试了您的代码。仅当您更改方向时,此方法才能正常工作,但如果您在横向上启动应用程序或从横向控制器转到其他控制器,则它不会根据当前界面方向反映更改。

使用以下方法,我曾经用它来解决同类问题。

在UINavigationController子类

中添加此代码
-(BOOL)shouldAutorotate
{
  return [[self.viewControllers lastObject] shouldAutorotate];
}

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

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
  return UIInterfaceOrientationPortrait;
}

在ViewController中,添加此代码

- (BOOL)shouldAutorotate
{
  return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
  //Control UIInterfaceOrientationMask here to tell which interface orientations you want to support for this ViewController
  return UIInterfaceOrientationMaskPortrait;
}