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版本哟~


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容