关闭

setStatusBarOrientation 未生效的解决办法

8130人阅读 评论(0) 收藏 举报
分类:


ios7,碰到个需要手动调整状态栏方向的问题,于是调用了下面这段代码。
//设置状态栏 横屏
[[UIApplication sharedApplication]setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];


问题来了,死活就是没有效果。
经过一番寻找,发现是
UIviewController方法- (BOOL)shouldAutorotate 返回值为YES的时候是不生效的。


发现原因了,马上解决,成功?
NO,你太天真了。

立马发现了下个问题,覆写方法- (BOOL)shouldAutorotate,仍然未生效。
WTF?
好吧,公布答案吧:由于UIViewController放置在Navigation中,而由于Navigation不人性化的设计,navigation的- (BOOL)shouldAutorotate是不会根据显示ViewController的- (BOOL)shouldAutorotate设置的值来改变的。


附上终极解决办法:将下面这段代码贴在AppDelegate.m的最后面,这个时候Navigation就会根据你显示的ViewController改变返回值了,然后你再去ViewController中覆写方法,返回NO,这时候,方法生效了!bingo!


@implementation UINavigationController (Rotation)


- (BOOL)shouldAutorotate
{
    return [[self.viewControllers lastObject] shouldAutorotate];
}


- (NSUInteger)supportedInterfaceOrientations
{
    return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}


- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}
@end


补充下:

iOS7 如果在 info文件中,加上一列View controller-based status bar appearance

用下面的方法可以轻松控制

       [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];



0
0
查看评论

iOS 关于调整状态栏方向方法setStatusBarOrientation的使用注意事项

通过 [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:YES]; 方法的枚举可以设置状态栏方向,但是需要在viewCon...
  • yyjjyysleep
  • yyjjyysleep
  • 2017-03-31 16:47
  • 1736

iOS9强制横屏

因为rootViewController是navigationController,所以我们不仅仅改变要控制器自身的frame,还要改变navigationController.view.bounds    _x =self.navigationController.view.b...
  • xyx340521
  • xyx340521
  • 2016-05-25 09:47
  • 1465

setStatusBarOrientation 未生效的解决办法

UIviewController方法- (BOOL)shouldAutorotate 返回值为YES的时候是不生效的。 由于UIViewController放置在Navigation中,而由于Navigation不人性化的设计,navigation的- (BOOL)shouldAutorotat...
  • qq_24180887
  • qq_24180887
  • 2016-06-07 17:09
  • 609

iOS6 setStatusBarOrientation失效

发现iOS6 setStatusBarOrientation失效,网上的解决方案是:需要函数 - (NSUInteger)supportedInterfaceOrientations返回值是0.
  • workhardupc100
  • workhardupc100
  • 2013-05-11 08:47
  • 4026

ios(ipad,iphone)屏幕旋转检测通用方法

在特别的场景下,需要针对屏幕旋转作特殊处理。在ios系统下实现相关的功能还是比较方便的。 我下面介绍两种方法: 1.注册UIApplicationDidChangeStatusBarOrientationNotification通知(举例:在一个viewcontroller类的viewdidlo...
  • openglnewbee
  • openglnewbee
  • 2014-10-23 21:26
  • 17626

setStatusBarOrientation方法

通常在使用视图控制器时,状态栏的方向会自动改变。如果要强制状态栏朝向一个方向,可以用UIApplication类的setStatusBarOrientation方法: [ myApp setStatusBarOrientation: UIInterfaceOrientation
  • yanxunuser
  • yanxunuser
  • 2011-09-19 11:34
  • 5614

App适配iOS8遇到的兼容问题

1. 键盘弹出方向与StatusBar方向不一致 在App中,第一个ViewController是只支持竖屏方向(Portrait)的,切换到第二个页面,默认也是Portrait,但用户可以点击按钮切换为横屏(Landscape)。 所以,我把App-Info.plist只选中了Port...
  • lkeplei
  • lkeplei
  • 2015-05-20 11:21
  • 1456

UIApplication sharedapplication用法总结

应用中打开其他应用
  • huang2009303513
  • huang2009303513
  • 2014-09-23 17:27
  • 24699

关于shouldAutorotate不执行的问题

楼主最近项目中加了视频播放,视频播放的话,肯定会设计到全屏播放,全屏和小屏好做,主要是旋转. 最开始楼主的视频全屏了,但是模拟器是竖屏.没有自动横过来.这也无所谓,大家会说手机屏幕横过来就可以了 但是,状态栏还在上边,你把手机横过来,状态栏就在左边了.这样的体验,不觉得怪怪的么,也试过隐藏状态栏,但...
  • zhaotao0617
  • zhaotao0617
  • 2016-04-12 10:29
  • 4874

iphone横屏显示和去掉状态栏的方法

 在iphone中开发全横屏应用的方法和步骤1. 新建一个view based的项目2. 在info.plist中增加一项:UIInterfaceOrientationUIInterfaceOrientationLandscapeRight3. View- (BOOL)shouldAuto...
  • xianghuibeijing
  • xianghuibeijing
  • 2010-03-01 19:37
  • 6281
    个人资料
    • 访问:31032次
    • 积分:517
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条