setStatusBarOrientation 未生效的解决办法

8575人阅读 评论(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];



查看评论

iOS6 setStatusBarOrientation失效

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

setStatusBarOrientation方法

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

setStatusBarOrientation 未生效的解决办法

ios7,碰到个需要手动调整状态栏方向的问题,于是调用了下面这段代码。//设置状态栏 横屏 [[UIApplication sharedApplication]setStatusBarOrientat...
  • Ginhoor
  • Ginhoor
  • 2014-03-04 12:28:09
  • 8575

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

通过 [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeL...
  • yyjjyysleep
  • yyjjyysleep
  • 2017-03-31 16:47:33
  • 2093

iOS9强制横屏

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

UIApplication sharedapplication用法总结

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

iOS屏幕旋转

http://blog.sina.com.cn/s/blog_859ab3360101377j.html 在iOS6之前的版本中,通常使用 shouldAutorotateToInt...
  • xuchaovip
  • xuchaovip
  • 2014-03-14 09:16:29
  • 392

ios11适配 以及会有的坑

1、iPhone X尺寸问题 分辨率1125*2436  (375*812) 导航栏为 44+44  原来为20+44 底部tabbar  49+34  其余屏幕 49+0  ...
  • u012701023
  • u012701023
  • 2017-09-29 10:18:28
  • 6801

Swift - 适配iOS 11,部分问题

1. UITableview 顶部出现留白 解决方法: 添加以下代码 func tableView(_ tableView: UITableView, viewForFooterInSectio...
  • a645258072
  • a645258072
  • 2017-09-20 14:53:06
  • 2491

No.11 Xcode(5.1.x) 设备或程序旋转

1. 利用正统的方式来控制旋转方向
  • huayu608
  • huayu608
  • 2014-07-22 09:45:35
  • 563
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 528
    排名: 9万+