强制旋转UIViewController

所以,我已经放弃了试图解决我一直在我的控制器将无需调用我的shouldAutorotateToInterfaceOrientation:方法的问题,因为每个人shouldAutorotateToInterfaceOrientation:这是一个iOS的bug。

现在我需要强制旋转我的UIViewController 。 有没有办法,我可以做到这一点,因为UIDevice实例方法已被删除,我不知道该怎么办强制旋转我的控制器。

我不知道你说的哪个UIDevice方法已经被删除了,但是下面的方法对我有用(这个确实使用了UIDevice方法)。 底线,如果您有一个只接受风景的视图,您可以使用以下内容来强制iOS更改方向。 这很好奇,但是很有效。 我很抱歉,我不能赞扬原作者,但曾经在StackOverflow的其他地方发现:

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight); } - (void)forceLandscape { // make sure shouldAutorotateToInterfaceOrientation is configured to accept only landscape if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation])) { UIWindow *window = [[UIApplication sharedApplication] keyWindow]; UIView *view = [window.subviews objectAtIndex:0]; [view removeFromSuperview]; [window addSubview:view]; } } 

相当于强制肖像模式(假设,当然,您的shouldAutorotateToInterfaceOrientation只接受肖像):

 - (void)forcePortrait { // make sure shouldAutorotateToInterfaceOrientation is configured to accept only portrait if (UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation])) { UIWindow *window = [[UIApplication sharedApplication] keyWindow]; UIView *view = [window.subviews objectAtIndex:0]; [view removeFromSuperview]; [window addSubview:view]; } } 

使用xcode7.3 ios9。 我一直试图迫使风景观和closures了一个多星期了,没有留下任何的头发:(对于其他人发现这个问题,没有任何答案的工作,或任何其他无数的答案迫使风景,我终于find在这里工作的东西: http : //www.btday.com/how-to-force-view-controller-orientation-in-ios-8/

build议是把操作放在viewDidAppear中,但是它也好像在viewWillAppear中工作,并且稍微不那么难看。

 override func viewWillAppear(animated: Bool) { UIDevice.currentDevice().setValue(UIInterfaceOrientation.LandscapeLeft.rawValue, forKey: "orientation") } 

如果这是错误的/不好的,请说出来,只有一个月有一个mac,所以我是一个完整的nuub!

另外请注意,我正在使用UITabBarController,这是不是你把这个标签栏控制器或其中的一个孩子