美文网首页iOS开发ios实用开发技巧iOS技术资料
iOS 指定控制器 横屏 一句代码都不用写~

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

作者: gitKong | 来源:发表于2016-09-08 15:48 被阅读554次

控制器横屏最简单的方法

//横屏.
    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版本哟~


相关文章

网友评论

  • 陆宝宝:群主,横屏状态下,由别的APP切换回来,就变成竖屏了。怎么控制啊
    陆宝宝:@gitKong 恩恩,我是在应用进入前台后,做了处理
    gitKong:@陆宝宝 一般做法可以记录app的横竖屏状态,切换前后台的时候再手动切换就好
  • 指尖猿:请教楼主,在横屏之后,frame(打印屏幕的宽和高)没有相对应的变化,该如何处理
    陆宝宝:群主,横屏状态下,由别的APP切换回来,就变成竖屏了。怎么控制啊
    gitKong:@指尖猿 需要自己重设frame喔,强制转屏会有这个问题
  • 浅笑回忆念旧时:push进去不会调横屏 要model进去才会

    VideoFullScreenPlayViewController *fullVc = [[VideoFullScreenPlayViewController alloc]init];

    //设置模态视图弹出样式
    fullVc.modalPresentationStyle = UIModalPresentationOverFullScreen;

    [self presentViewController:fullVc animated:YES completion:nil];

本文标题:iOS 指定控制器 横屏 一句代码都不用写~

本文链接:https://www.haomeiwen.com/subject/bbvsettx.html