iOS 指定控制器 横屏 一句代码都不用写~

控制器横屏最简单的方法

//横屏.
    NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeRight];
    [[UIDevice currentDevice] setValue:value forKey:@"orientation"];

出现的问题

此时竖屏Push 进去,就算设置了横屏(上述代码),不管frame 还是 bounds都是竖屏的!我暂时不知道为啥,知道的小伙伴可以在下方留言喔~

解决办法

由于横屏后,屏幕的宽高调转而已,那么可以创建一个view设置frame 满屏填充控制器的view,后续控件直接添加到这个view上面

CGRectMake(0, 0, self.view.bounds.size.height, self.view.bounds.size.width);

更简单的处理方法

  • 如果项目中出现很多个横屏的控制器,如果每个控制器都这样处理,是不是太麻烦了,而且这样不是白白创建多一个view添加到控制器的view上面么?

没错!loadView 创建一个view设置好横屏的frame(调转宽高),然后替换到控制器的view,此时self.view 就是横屏的view啦! 当然,还可以写一个基类,将横屏竖屏的逻辑都处理了,我创建一个横屏控制器只需要继承它就行,什么都不用管咯,进来横屏,出去就回到竖屏~是不是很爽!

Demo 地址

- (void)loadView{
    UIView *fl_view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.height, [UIScreen mainScreen].bounds.size.width)];
    self.view = fl_view;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
}

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    //横屏.
    [self fl_screenStyle:UIInterfaceOrientationLandscapeRight];
}

- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    //竖屏.
    [self fl_screenStyle:UIInterfaceOrientationPortrait];
}

#pragma mark -- private method
- (void)fl_screenStyle:(UIInterfaceOrientation)interfaceOrientation{
    NSNumber *value = [NSNumber numberWithInt:interfaceOrientation];
    [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
}

喜欢给个like 和 star 呗,Demo里面还有swift版本哟~


你可能感兴趣的:(iOS 指定控制器 横屏 一句代码都不用写~)