前言
虽然iOS10都快出正式版了,现在才说iOS7之后的某些API问题,确实是有些慢了.之前一直都是直接那样或这样的用,只要能完成功能就算了,后来慢慢在整理代码时,删除了苹果弃用的API.有空了,就做个记录吧
1. info.pList中的 View controller-based status bar appearance.
默认是YES( 使用VC的preferredStatusBarStyle, prefersStatusBarHidden, preferredStatusBarUpdateAnimation,setNeedsStatusBarAppearanceUpdate 来设置状态栏statusBar). 一些使用的API比较旧的代码常常会设置为NO( 用[UIApplication sharedApplication] setStatusBarHidden来设置 ).
注意: 若为YES,要实现preferredStatusBarStyle时,需要VC的容器类实现的childViewControllerForStatusBarStyle 返回当前的VC, 若VC的容器类是UINavigationController, 可以子类化后实现:
#pragma mark - statusBar
- (UIViewController *)childViewControllerForStatusBarStyle
{
return self.topViewController;
}
JxdCommon库只处理 View controller-based status bar appearance 为YES的情况, 使用UIViewController(JxdCommon) 来实现, 如下代码:
#pragma mark - statusBar
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
- (UIStatusBarStyle)preferredStatusBarStyle
{
return self.statusBarStyle;
}
- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation
{
return self.statusBarAnimation;
}
- (BOOL)prefersStatusBarHidden
{
return self.statusBarHidden;
}
#pragma clang diagnostic pop
2. iOS9后弃用的API: setStatusBarOrientation
若还想调用此函数,则需要实现VC的函数: shouldAutorotate, 并返回NO, 才有效果, 如下代码:
//UIViewController子类实现
- (BOOL)shouldAutorotate
{
return NO;
}
//调用
- (void)changedStatusBarOrientation
{
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:YES];
}
苹果说,在iOS6之后,调用此函数来设置状态栏的方向的作用是有限的.(Explicit setting of the status bar orientation is more limited in iOS 6.0 and later)此弃用感觉是比较扯蛋的.比如说在强制横屏或竖屏时,除了使用 UIDevice 的 orientation 来设置外,若你想用transform来处理,同时还想显示系统的statusBar,那就只能呵呵了.一边弃用,一边又不给替换的API使用. 若你强制使用setStatusBarOrientation,那可以,就是有此小复杂.具体可参考另一文章: 设备界面旋转