iOS 指定控制器 横屏 一句代码都不用写~
2016-09-08 本文已影响554人
gitKong
控制器横屏最简单的方法
//横屏.
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"];
}