以编程方式在viewdidload中设置方向不起作用

我已经创build了一个iPad的应用程序,其中的主屏幕只能在肖像模式下显示。 所以我已经在viewdidload中使用了下面的代码。

[[UIDevice currentDevice] setOrientation:UIDeviceOrientationPortrait]; 

但它不工作。 我正在使用ios 7 xcode 5.如果我从横向模式打开我的应用程序,它会自动转到肖像模式。 但我越来越像这样:

在这里输入图像说明

但应该是这样的:

在这里输入图像说明

任何人都可以帮我解决这个问题。 提前致谢。

 [[UIDevice currentDevice] setOrientation:UIDeviceOrientationPortrait]; 

此方法已弃用。 你不能再使用这个方法了。

https://stackoverflow.com/a/12813644/1405008

上面的链接提供了如何为UIViewController提供仅肖像模式的细节。

如果你推入NavigationViewController然后尝试这个。

https://stackoverflow.com/a/16152506/1405008

以下代码即将以编程方式将纵向的导航控制器视图转换为横向:

 [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.3]; self.navigationController.view.transform = CGAffineTransformIdentity; self.navigationController.view.transform = CGAffineTransformMakeRotation(M_PI*(90)/180.0); self.navigationController.view.bounds = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.height, [UIScreen mainScreen].bounds.size.width); [UIView commitAnimations]; self.view.frame = self.view.frame; //This is necessary self.wantsFullScreenLayout = YES; [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO]; - (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { return (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight); } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscapeRight; } 

只是希望能提供一些其他的想法。

复制这个代码在你的viewdidload

 UIInterfaceOrientation orientation = (UIInterfaceOrientation)[[UIDevice currentDevice] orientation]; if(orientation == UIInterfaceOrientationPortrait) { isLandscapeMode = NO; inLandscapeRight = NO; inLandscapeLeft = NO; } else if(orientation == UIInterfaceOrientationLandscapeRight) { isLandscapeMode = YES; inLandscapeRight = YES; inLandscapeLeft = NO; } else if(orientation == UIInterfaceOrientationLandscapeLeft) { isLandscapeMode = YES; inLandscapeRight = NO; inLandscapeLeft = YES; } -(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) { isLandscapeMode = YES; inLandscapeLeft = YES; inLandscapeRight = NO; frameForProfile = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height); } else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) { isLandscapeMode = YES; inLandscapeLeft = NO; inLandscapeRight = YES; frameForProfile = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height); } else { isLandscapeMode = NO; inLandscapeLeft = NO; inLandscapeRight = NO; } } 

根据您的要求设置BOOL

从你的截图中,我可以看到你的应用程序是选项卡的基础。 几天前我面临同样的问题。 我解决了它。 我问了一个几乎和你一样的问题。 然后几个小时的阅读,我解决了这个问题。 有我的问题和答案的链接。

这里有很多类似的问题和答案,但不知为什么他们都没有为我工作,因为我需要在iPhone上只允许使用肖像模式 ,而在iPad上只允许使用横向模式 ,所以共享我的解决scheme:

  1. 删除与设备方向( shouldAutoRotate, supportedInterfaceOrientations, preferredInterfaceOrientations等)有关的所有方法,因为它们可能彼此冲突

  2. 在项目设置中启用全部4种模式:纵向,倒置,左侧横向,右侧横向

  3. select识别设备types(iPhone或iPad)的方法。 我正在使用UIScreen.mainScreen().bounds.height which不是理想的,但适合我的需要

  4. 在AppDelegate中放置以下内容

     func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask { if UIScreen.mainScreen().bounds.height < 760 { //iPhone UIApplication.sharedApplication().setStatusBarOrientation(.Portrait, animated: false); return UIInterfaceOrientationMask.Portrait; } else { UIApplication.sharedApplication().setStatusBarOrientation(.LandscapeLeft, animated: false); return UIInterfaceOrientationMask.Landscape; } } 

在Xcode 7.1.1上testing所有运行iOS9.1的iPhone和iPad模拟器