方法
1、通過AppDelegate的 - application: supportedInterfaceOrientationsForWindow: 方法來設定
這個方法是幹什麼的,說明一下這個方法是用來設定介面支援的轉屏方向,不是用來轉屏的,這個方法不能滿足部分需求。
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)nowWindow { if (_deviceOrientationPortrait) { return UIInterfaceOrientationMaskPortrait; } return UIInterfaceOrientationMaskLandscape | UIInterfaceOrientationMaskPortrait;}
_deviceOrientationPortrait是AppDelegate的一個Bool屬性,當需要豎屏顯示的介面:
在一個介面中,如下處理
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[AppDelegate delegate] setDeviceOrientationPortrait:YES];}- (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; [[AppDelegate delegate] setDeviceOrientationPortrait:NO];}
注意:這樣只能設定該介面所支援的轉屏方向,如果剛開始進入介面的時候是其他方向,就不能保證介面轉回來。如果整個項目需要設定橫豎屏,直接用這個方法還是挺好的。
2、如果剛進入介面就要讓介面處於豎屏,就要複寫一下幾個方法來處理:
- (BOOL)shouldAutorotate { return YES;}- (UIInterfaceOrientationMask)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait;}- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return UIInterfaceOrientationPortrait;}
這種方式需要配置如下,why:
3、 最後
UINavigationController或UITabBarController,需要做特殊處理。
//是否自動旋轉-(BOOL)shouldAutorotate{ return self.topViewController.shouldAutorotate;}//支援的方向- (UIInterfaceOrientationMask)supportedInterfaceOrientations{ return self.topViewController.supportedInterfaceOrientations;}//一開始的方向 很重要- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{ return self.topViewController.preferredInterfaceOrientationForPresentation;}
推薦閱讀:https://www.jianshu.com/p/6ac34ab1ea24 選擇性採納。