setStatusBarOrientation 未生效的解决办法


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];



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ginhoor/article/details/20454229
个人分类: 个人经验
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭