• 手动转屏


    ios7,碰到个需要手动调整状态栏方向的问题,于是调用了下面这段代码。

     
    1. //设置状态栏 横屏  
    2. [[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!

     
    1. @implementation UINavigationController (Rotation)  
    2.   
    3.   
    4. - (BOOL)shouldAutorotate  
    5. {  
    6.     return [[self.viewControllers lastObject] shouldAutorotate];  
    7. }  
    8.   
    9.   
    10. - (NSUInteger)supportedInterfaceOrientations  
    11. {  
    12.     return [[self.viewControllers lastObject] supportedInterfaceOrientations];  
    13. }  
    14.   
    15.   
    16. - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {  
    17.     return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];  
    18. }  
    19. @end  

    补充下:

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

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

     
      1. [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];  
  • 相关阅读:
    意料之外,情理之中,Spring.NET 3.0 版本发布-
    学习究竟是为了什么?
    测量软件应用系统的聚合复杂度【翻译稿】
    关键字New,如阴魂不散
    选择IT事业,意味着终身学习
    华为机试001:字符串最后一个单词的长度(华为OJ001)
    C++版
    C++版
    C++版-剑指offer 面试题6:重建二叉树(Leetcode105. Construct Binary Tree from Preorder and Inorder Traversal) 解题报告
    C++版
  • 原文地址:https://www.cnblogs.com/liyufeng2013/p/6100363.html
Copyright © 2020-2023  润新知