ios7状态栏以及导航栏
来源:互联网 发布:艾灸淘宝推广文章 编辑:程序博客网 时间:2024/06/03 19:23
本文来自 Toothpick's blog
ios7的发布使得ios的导航栏和状态栏一体化,渐渐适应以后还是蛮好看的。但是作为开发者,接下来新SDK编译的适配工作也会显得蛋疼不已。许多应用如微信等,可能还是只是适配布局,未进行较大的UI改动,或是出于谨慎考虑。设计风格的大改,怕是不可避免的。本公司的射鸡师早已酝酿出了一套界面,咋一看还真是漂亮极了。导航栏一会绿色一会白色,状态栏字体也是一会黑色一会白色,所以射鸡师它真的不痛程序猿的痛好吗!?
ok,这个适配工作真是有些许麻烦,既要保证完美适配,也不想搞乱项目。来吧。
设置导航栏的背景颜色
在iOS 7中,不再使用tintColor属性来设置导航栏的颜色,而是使用barTintColor属性来修改背景色。我们可以在AppDelegate.m文件中的方法didFinishLaunchingWithOptions:里面添加如下代码来修改颜色:
[[UINavigationBar appearance] setBarTintColor:[UIColor yellowColor]];
默认情况下,导航栏的translucent属性为YES。另外,系统还会对所有的导航栏做模糊处理,这样可以让iOS 7中导航栏的颜色会变得淡了。至于这个的解决方案可以参考:
如何在iOS 7中设置barTintColor实现类似网易和 Facebook 的 navigationBar 效果
http://www.cocoachina.com/applenews/devnews/2013/1024/7233.html
修改状态栏风格
在老版本的iOS中,状态栏永远都是白色风格。而在iOS 7中,我们可以修改每个view controller中状态栏的外观。通过UIStatusBarStyle常量可以指定状态栏的内容是暗色或亮色。默认情况下,状态栏的显示是暗色,状态栏上的时间、电池指示器和Wi-Fi信号显示为暗色,通常搭配浅色的背景。相反的,深色的背景时需要转为亮色的状态栏搭配。
在iOS 7中,我们可以在每个view controller中overridingpreferredStatusBarStyle:方法,如下所示:
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
另外,我们也可以使用UIApplication的statusBarStyle方法来设置状态栏,不过,首先需要停止使用View controller-based status bar appearance。在project target的Info tab中,插入一个新的key,名字为View controller-based status bar appearance,并将其值设置为YES,动态改变状态栏。
适配工作
NO.1
了解了修改的方法以后,接下来是如何简单方便的适配整个项目了。
对于原先使用官方类UINavigationController,可以添加一个扩展类UIViewController+NavigationBar,使用公共方法来设置导航栏
- (void)setBarColor:(UIColor)color
{
if (isIOS7)
{
[self.navigationController.navigationBar setBarStyle:UIBarStyleDefault];
[self.navigationController.navigationBar setBarTintColor:color];
}
else
{
[self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];
[self.navigationController.navigationBar setTintColor:color];
}
}
如果,有需要再自定义UINavigationBar为MyUINavigationBar,和UINavigationController为MyUINavigationController
MyUINavigationBar:
- (void)setBarTintColor:(UIColor )barTintColor {
//自定义
}
- (void)setTintColor:(UIColor )tintColor
{
//自定义
}
MyUINavigationController:
- (id)init {
self = [super initWithNavigationBarClass:[MyUINavigationBar class] toolbarClass:nil];
return self;
}
- (id)initWithRootViewController:(UIViewController )rootViewController {
self = [super initWithNavigationBarClass:[MyUINavigationBar class] toolbarClass:nil];
if(self) {
self.viewControllers = @[rootViewController];
};
return self;
}
NO.2
状态栏也需要因应导航栏的变化而变化,创建扩展类UIViewController+StatusBarStyle
UIViewController+StatusBarStyle.h:
@interface StatusBarStyle : NSObject
+ (UIStatusBarStyle)statusBarStyle;
+ (BOOL)statusBarHidden;
@end
@interface UIViewController (StatusBarStyle)
- (void)setStatusBarStyle:(UIStatusBarStyle)style;
- (void)setStatusBarHidden:(BOOL)isHidden;
@end
UIViewController+StatusBarStyle.m:
@implementation StatusBarStyle
static UIStatusBarStyle statusBarStyle = UIStatusBarStyleDefault;
static bool isBarHidden = NO;
static UIViewController *viewControllerv = nil;
+ (UIStatusBarStyle)statusBarStyle
{
return statusBarStyle;
}
+ (BOOL)statusBarHidden
{
return isBarHidden;
}
@end
@implementation UIViewController (StatusBarStyle)
- (void)setStatusBarStyle:(UIStatusBarStyle)style
{
if (isIOS7) {
statusBarStyle = style;
[viewControllerv setNeedsStatusBarAppearanceUpdate];
}
}
- (void)setStatusBarHidden:(BOOL)isHidden
{
if (isIOS7) {
isBarHidden = isHidden;
[viewControllerv setNeedsStatusBarAppearanceUpdate];
}
}
#ifdef __IPHONE_7_0
- (UIStatusBarStyle)preferredStatusBarStyle
{
viewControllerv = nil;
viewControllerv = self;
return [StatusBarStyle statusBarStyle];
}
- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation
{
return UIStatusBarAnimationFade;
}
- (BOOL)prefersStatusBarHidden
{
return [StatusBarStyle statusBarHidden];
}
#endif
@end
0 0
- ios7状态栏以及导航栏
- IOS7导航栏和状态栏学习
- iOS7中定制导航栏和状态栏
- IOS7的状态栏和导航栏
- 定制IOS7中的导航栏和状态栏
- IOS7的状态栏和导航栏
- IOS7的状态栏和导航栏
- IOS7的状态栏和导航栏
- IOS7的状态栏和导航栏
- IOS7的状态栏和导航栏
- ios7之后导航栏状态栏小记
- 定制ios7中的导航栏和状态栏
- 关于IOS7上导航栏遮盖状态栏的问题,以及解决方案
- IOS7改变状态栏文字的颜色以及导航栏背景颜色
- IOS7改变状态栏文字的颜色以及导航栏背景颜色
- 在IOS7下自定义导航栏和状态栏
- xcode5 ios7 后状态栏被导航栏遮挡的解决方案
- xcode5 ios7 后状态栏被导航栏遮挡的解决方案
- 简单计算题!我就是笨!
- 品尝人生之苦:褚时健与他的褚橙
- iOS iphone5屏幕适配 autosizing [此博文包含图片]
- Hrbeu 1209
- javap的基本用法
- ios7状态栏以及导航栏
- STL array的operator[]方法(15)
- const 和 extern 用法小結
- UF超滤膜:超滤膜在酒店行业的应用
- 保护好大脑的海马区,老了也不怕健忘
- 【IOS 开发】Object - C 入门 之 数据类型详解
- wikioi 1029 中序遍历总数
- Servlet实现的三种方法
- 人的潜力是无限的