方法
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 选择性采纳。