以编程方式在viewdidload中设置方向不起作用
我已经创build了一个iPad的应用程序,其中的主屏幕只能在肖像模式下显示。 所以我已经在viewdidload中使用了下面的代码。
[[UIDevice currentDevice] setOrientation:UIDeviceOrientationPortrait];
但它不工作。 我正在使用ios 7 xcode 5.如果我从横向模式打开我的应用程序,它会自动转到肖像模式。 但我越来越像这样:
但应该是这样的:
任何人都可以帮我解决这个问题。 提前致谢。
[[UIDevice currentDevice] setOrientation:UIDeviceOrientationPortrait];
此方法已弃用。 你不能再使用这个方法了。
https://stackoverflow.com/a/12813644/1405008
上面的链接提供了如何为UIViewController
提供仅肖像模式的细节。
如果你推入NavigationViewController
然后尝试这个。
以下代码即将以编程方式将纵向的导航控制器视图转换为横向:
[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:
-
删除与设备方向(
shouldAutoRotate, supportedInterfaceOrientations, preferredInterfaceOrientations
等)有关的所有方法,因为它们可能彼此冲突 -
在项目设置中启用全部4种模式:纵向,倒置,左侧横向,右侧横向
-
select识别设备types(iPhone或iPad)的方法。 我正在使用
UIScreen.mainScreen().bounds.height which
不是理想的,但适合我的需要 -
在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模拟器