iOS 页面横竖屏

当App启动的时候需要强制竖屏,进入App后允许横屏或者竖屏的解决办法:

1、修改App-Info.plist文件只支持UIInterfaceOrientationPortrait方向,如下:
UISupportedInterfaceOrientations

    UIInterfaceOrientationPortrait

2、在AppDelegate.m文件中添加如下代码:
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    return UIInterfaceOrientationMaskAllButUpsideDown;
}
3、新建一个导航控制器的分类,添加如下代码:
#import "UINavigationController+Orientation.h"

@implementation UINavigationController (Orientation)

/**
 *  导航控制器旋转问题
 *  只想在某一个类可以进行旋转,其他类不能旋转.
 *  扩展导航控制器方法,写以下几个方法
 */
/// 是否自动旋转
- (BOOL)shouldAutorotate
{
    return [[self.viewControllers lastObject] shouldAutorotate];
}

/// 支持的方向
- (NSUInteger)supportedInterfaceOrientations
{
    return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}

/// 返回优先的方向 (此方法不需要写,如果写了,App在横屏时候回到后台,再重新打开App,界面会竖屏显示)
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}

@end
4、新建一个UITabBarController的分类,添加如下代码:
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
    return [self.selectedViewController supportedInterfaceOrientations];
}

/// 返回优先的方向 (此方法不需要写,如果写了,App在横屏时候回到后台,再重新打开App,界面会竖屏显示)
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return [self.selectedViewController preferredInterfaceOrientationForPresentation];
}

- (BOOL)shouldAutorotate {
    return self.selectedViewController.shouldAutorotate;
}
5、新建一个基类控制器,里面添加如下代码:
@property (nonatomic, assign, getter=isAutoRotate) BOOL autoRotate;

/// 是否自动旋转
- (BOOL)shouldAutorotate {
    return self.isAutoRotate;
}

/// 支持的方向
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return self.isAutoRotate ? UIInterfaceOrientationMaskAllButUpsideDown : UIInterfaceOrientationMaskPortrait;
}

/// 返回优先的方向(此方法不需要写,如果写了,App在横屏时候回到后台,再重新打开App,界面会竖屏显示)
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationPortrait;
}

当某一个控制器需要进行旋转的时候,直接写self.isAutoRotate = YES 就可以啦~

【Github地址】https://github.com/huipengo/WBOrientation

你可能感兴趣的:(iOS 页面横竖屏)