关于ios9 是否允许横竖屏设置,以及状态栏颜色设置

关于横竖屏的设置方法,首先工程里的这几个选项的优先级应该高于这几个个方法,下面几个方法可以在这个基础之上做微调,比如要求某个页面可以横竖屏,另外一个页面只能横屏,其他所有页面只能竖屏,这种设置需求。

一、首先可以在AppDel里面设置支持的模式,这是UIApplication的方法

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window

{

  // 返回枚举类型 

    return UIInterfaceOrientationMaskAllButUpsideDown;

}


之后就可以根据VC来决定支持何种模式了


二、以下方法都是UIViewController的方法,需要实现前两个方法


// 应该是是否允许自动旋转,调用次数不多,大概是一个VC调用一次,用来判断当前是否可以旋转

- (BOOL)shouldAutorotate

{

    return YES;

}


// 当前VC支持何种状态,调用次数很多,进去会调用,旋转屏幕也会调用

- (UIInterfaceOrientationMask)supportedInterfaceOrientations

{

    return UIInterfaceOrientationMaskPortrait;

}


// 这个方法好像从来没调用过,不知道有什么用,可以不去实现它

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation;


三、注意事项

1、据说,所有的旋转判断都交给了根VC(或者当前present出来的VC)来判断,所有要在当前window的根控制器(或者当前present出来的VC)上实现VC的这两个方法

2、可以用根VC找到底下的子VC,获取子VC的返回值,从而动态控制某一个VC是否支持横竖屏

3、当有导航控制器切换页面的时候,push和pop的时候会有一些莫名的bug,比方说push进去的VC不会自动旋转屏幕,pop回去时候的动画会乱七八糟。。。目前没有好的解决办法,也许只能用present来解决,只能是一个临时解决方案。






同样的状态栏颜色设置也很麻烦,如果有这么一个要求,launch的时候一个样子,某个页面一个样子,其他页面又一个样子,那就麻烦了。。。


一、首先还是可以在工程里面改这个状态,改了以后所有的都变了,似乎会覆盖掉代码写的style,所以改了这个应该就是永远不能动态修改状态了



二、其次如果把上面那个设定为default,那么代码可以动态控制了,首先要改plist文件,加个这个属性,设置为YES,不然下面的方法都没法用



三、方法

// 设置好plist文件后 默认状态栏文字白色 但是这个不能改launchscreen上面的状态栏

- (UIStatusBarStyle)preferredStatusBarStyle

{

    return UIStatusBarStyleLightContent;

}

// 是否隐藏

- (BOOL)prefersStatusBarHidden

{

    return YES;

}

这样就可以根据VC控制状态栏了

四、补充

1、通过上面代码方法还不能设置launchScreen的状态栏,似乎只能用一的方式整个app都改掉,或者干脆把launch上的状态栏隐藏掉,方法是


2、同样如果使用了导航控制器,那么这些方法也会出些问题,暂时还没去测试到底是根据导航控制器本身来决定,还是导航当前显示的页面决定,还是push之前显示的页面决定,这是一个问题,,,

3、要改状态栏的背景还好一点,一种是自己加个20高的背景view上去,导航栏背景图用44高,一种是用64高的导航栏背景图,或者不用图片的纯色就是和导航栏背景一样的,总之就是和导航栏息息相关。。。

你可能感兴趣的:(问题)