近期,跟大多数开发者一样,我也正忙于对程序进行升级以适配iOS 7。最新的iOS 7外观上有大量的改动。从开发者的角度来看,导航栏和状态栏就发生了明显的变化。状态栏现在是半透明的了,这也就意味着导航栏会显示在状态栏后面。有些情况下,导航栏的背景图片可以延伸显示到状态栏后面。
之前我曾经写过一篇关于如何定制导航栏的文章。不过现在是时候对其进行更新了。下面就是本文将要介绍的内容:
iOS 7中默认的导航栏
设置导航栏的背景颜色
在导航栏中使用背景图片
定制返回按钮的颜色
修改导航栏标题的字体
修改导航栏标题为图片
添加多个按钮
修改状态栏的风格
隐藏状态栏
总结
本文提供的代码需要用Xcode 5来执行。如果你还在使用老版本的Xcode,那么在运行示例之前请将Xcode升级到Xcode 5。
iOS 7中默认的导航栏
在开始定制之前,我们先来看看iOS 7中默认导航栏的外观。通过Xcode用Single View Controller模板创建一个工程。然后将view controller嵌入到一个navigation controller中。如果你不想从头开始,那么也可以在这里下载到这个示例工程。Xcode
5包含有iOS 6和iOS 7模拟器,我们可以在这两个不同的模拟器版本中运行示例程序,进行对比,如下图所示:
如上图所示,在iOS 7中的导航栏默认情况下跟状态栏是交织在一起的,并且它的颜色也被修改为亮灰色。
设置导航栏的背景颜色
在iOS 7中,不再使用tintColor属性来设置导航栏的颜色,而是使用barTintColor属性来修改背景色。我们可以在AppDelegate.m文件中的方法didFinishLaunchingWithOptions:里面添加如下代码来修改颜色:
- [[UINavigationBarappearance]setBarTintColor:[UIColoryellowColor]];
效果如下图所示:
一般情况,我们都会使用自己的颜色,下面这个宏用来设置RGB颜色非常方便:
- #defineUIColorFromRGB(rgbValue)[UIColorcolorWithRed:((float)((rgbValue&0xFF0000)>>16))/255.0green:((float)((rgbValue&0xFF00)>>8))/255.0blue:((float)(rgbValue&0xFF))/255.0alpha:1.0]
将上面这个宏放到AppDelegate.m文件中,然后通过这个宏来创建一个UIColor对象(根据指定的RGB)。如下示例:
- [[UINavigationBarappearance]setBarTintColor:UIColorFromRGB(0x067AB5)];
默认情况下,导航栏的translucent属性为YES。另外,系统还会对所有的导航栏做模糊处理,这样可以让iOS 7中导航栏的颜色更加饱和。如下图,是translucent值为NO和YES的对比效果:
要想禁用translucent属性,可以在Storyboard中选中导航栏,然后在Attribute Inspectors中,取消translucent的勾选。
在导航栏中使用背景图片
如果希望在导航栏中使用一个图片当做背景,那么你需要提供一个稍微高一点的图片(这样可以延伸到导航栏背后)。导航栏的高度从44 points(88 pixels)变为了64 points(128 pixels)。我们依然可以使用setBackgroundImage:方法为导航栏设置自定义图片。如下代码所示:
- [[UINavigationBarappearance]setBackgroundImage:[UIImageimageNamed:@"nav_bg.png"]forBarMetrics:UIBarMetricsDefault];
示例工程中提供了两个背景图片:nav_bg.png 和 nav_bg_ios7.png。运行一下试试看吧,如下效果:
定制返回按钮的颜
在iOS 7中,所有的按钮都是无边框的。其中返回按钮会有一个V型箭头,以及上一个屏幕中的标题(如果上一屏幕的标题是空,那么就显示”返回”)。要想给返回按钮着色,可以使用tintColor属性。如下代码所示:
- [[UINavigationBarappearance]setTintColor:[UIColorwhiteColor]];
除了返回按钮,tintColor属性会影响到所有按钮标题和图片。
如果想要用自己的图片替换V型,可以设置图片的backIndicatorImage和backIndicatorTransitionMaskImage。如下代码所示:
- [[UINavigationBarappearance]setBackIndicatorImage:[UIImageimageNamed:@"back_btn.png"]];
- [[UINavigationBarappearance]setBackIndicatorTransitionMaskImage:[UIImageimageNamed:@"back_btn.png"]];
图片的颜色是由tintColor属性控制的。
修改导航栏标题的字体
跟iOS 6一样,我们可以使用导航栏的titleTextAttributes属性来定制导航栏的文字风格。在text attributes字典中使用如下一些key,可以指定字体、文字颜色、文字阴影色以及文字阴影偏移量:
UITextAttributeFont – 字体key
UITextAttributeTextColor – 文字颜色key
UITextAttributeTextShadowColor – 文字阴影色key
UITextAttributeTextShadowOffset – 文字阴影偏移量key
如下代码所示,对导航栏的标题风格做了修改:
- NSShadow*shadow=[[NSShadowalloc]init];
- shadow.shadowColor=[UIColorcolorWithRed:0.0green:0.0blue:0.0alpha:0.8];
- shadow.shadowOffset=CGSizeMake(0,1);
- [[UINavigationBarappearance]setTitleTextAttributes:[NSDictionarydictionaryWithObjectsAndKeys:
- [UIColorcolorWithRed:245.0/255.0green:245.0/255.0blue:245.0/255.0alpha:1.0],NSForegroundColorAttributeName,
- shadow,NSShadowAttributeName,
- [UIFontfontWithName:@"HelveticaNeue-CondensedBlack"size:21.0],NSFontAttributeName,nil]];
运行效果如下图所示:
修改导航栏标题为图片
如果要想将导航栏标题修改为一个图片或者logo,那么只需要使用下面这行代码即可:
- self.navigationItem.titleView=[[UIImageViewalloc]initWithImage:[UIImageimageNamed:@"appcoda-logo.png"]];
上面的代码简单的修改了titleView属性,将一个图片赋值给它。 注意:这不是iOS 7中的新功能,之前的iOS版本就可以已经有了。具体效果如下图所示:

添加多个按钮
同样,这个技巧也不是iOS 7的,开发者经常会在导航栏中添加多个按钮,所以我决定在这里进行介绍。我们可以在导航栏左边或者右边添加多个按钮。例如,我们希望在导航栏右边添加一个照相机和分享按钮,那只需要使用下面的代码即可:
- UIBarButtonItem*shareItem=[[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemActiontarget:selfaction:nil];
- UIBarButtonItem*cameraItem=[[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCameratarget:selfaction:nil];
- NSArray*actionButtonItems=@[shareItem,cameraItem];
- self.navigationItem.rightBarButtonItems=actionButtonItems;
如下效果:
修改状态栏的风格
在老版本的iOS中,状态栏永远都是白色风格。而在iOS 7中,我们可以修改每个view controller中状态栏的外观。通过UIStatusBarStyle常量可以指定状态栏的内容是暗色或亮色。默认情况下,状态栏的显示是暗色。也就是说,状态栏上的时间、电池指示器和Wi-Fi信号显示为暗色。如果导航栏中使用暗色为背景,那么看起来的效果如下图所示:
如上图这种情况下,我们可能希望将导航栏的风格修改为亮色。这里有两个方法可以实现。在iOS 7中,我们可以在每个view controller中overridingpreferredStatusBarStyle:方法,如下所示:
- -(UIStatusBarStyle)preferredStatusBarStyle
- {
- returnUIStatusBarStyleLightContent;
- }
上面代码的效果如下图所示:
在iOS 7中,通过上面的方法来修改状态栏风格非常的棒。另外,我们也可以使用UIApplication的statusBarStyle方法来设置状态栏,不过,首先需要停止使用View controller-based status bar appearance。在project target的Info tab中,插入一个新的key,名字为View controller-based status bar appearance,并将其值设置为NO。
然后就可以使用下面的代码来设置状态栏风格了:
- [[UIApplicationsharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];
隐藏状态栏
有时候我们需要隐藏状态栏,那么此时我们在view controller中override方法prefersStatusBarHidden:即可,如下代码所示:
- -(BOOL)prefersStatusBarHidden
- {
- returnYES;
- }
总结
iOS 7给开发者提供了一些新的自由度来定制导航栏和状态栏的外观。希望上面的这些技巧能对你有用。这里可以下载到示例工程源码。只需要取消相关代码注释即可进行测试。
分享到:
相关推荐
在iOS开发中,自定义导航栏(Navigation Bar)和表格(TableView)是两个非常重要的组件,它们被广泛用于构建各种用户界面。这篇学习笔记将深入探讨如何在iOS应用中实现自定义导航栏以及如何有效利用表格展示数据。 ...
本项目“ios-滑动改变导航栏状态.zip”主要展示了如何通过用户滑动屏幕来动态改变导航栏的状态,比如在下拉时放大导航栏中的图片,提供更丰富的交互体验。这个功能常见于新闻阅读、社交媒体等类型的App中,增加用户...
总结起来,"ios-导航栏隐藏和显示.zip"的示例涵盖了导航栏控制的核心技巧,包括导航栏的显示与隐藏逻辑、自定义手势识别、返回按钮的定制等,这些都是提升iOS应用用户体验的关键要素。开发者需要熟练掌握这些技术,...
- 如果需要动态改变导航栏状态,如动画过渡,可以在`layoutSubviews()`或者`willTransition(to:)`等方法中处理。 4. **设置自定义导航栏**: 在需要使用自定义导航栏的`UIViewController`中,通过`...
本文将详细解析如何使用Objective-C(OC)语言,通过AUThemeManager来定制mPass iOS应用的导航栏。 首先,我们需要了解`UINavigationController`的基本用法。它是iOS SDK提供的一种容器控制器,用于管理一个导航...
在iOS的设计中,QQ的底部导航栏有其独特的风格,如平滑的过渡动画和定制的图标样式。 在这个项目中,开发者可能实现了以下关键点: 1. **自定义视图**:为了达到仿iOS的效果,可能创建了一个自定义的View或者使用...
在iOS开发中,状态栏和导航栏是用户界面的关键组成部分,它们提供了系统信息和应用程序导航。本文将深入探讨如何在iOS应用中管理这两个组件。 首先,状态栏显示重要的设备信息,如时间、电池状态和网络连接。在iOS...
iOS 隐藏导航条和状态栏实现方法 状态栏的高度是20,导航栏的高度是44,如果同时存在状态栏的导航条,我们通常会设置view上的控件的位置的X 大于等于 64. 一:隐藏导航条:self.navigationController....
2. **监听视图控制器的生命周期**:在`viewWillAppear:`和`viewWillDisappear:`方法中,我们可以根据当前页面的状态更新导航栏标题,实现标题的动态变化。 3. **与ScrollView的联动**:如果Title切换效果与...
在iOS开发中,导航栏(UINavigationController)是应用界面中不可或缺的部分,用于展示层级结构和进行页面间的导航。平滑地显示和隐藏导航栏不仅能够提升用户体验,还能在某些场景下创造出更美观、流畅的视觉效果。...
下面我们将深入探讨自定义导航栏在iOS开发中的实现方法和相关知识点。 1. **UINavigationController**:这是iOS SDK中的一个类,负责管理一个堆栈式的视图控制器数组,并通过导航栏进行切换。默认的导航栏提供了...
总的来说,"NavAndStatusDemo"这个项目覆盖了Android应用开发中关于状态栏和导航栏的重要定制技巧,包括颜色调整、显示隐藏、交互响应和动画效果。这些技术对于创建个性化、专业化的应用界面至关重要。开发者可以...
在iOS应用开发中,自定义状态栏和导航栏是常见的需求,以满足各种视觉效果和交互体验。本文将详细介绍如何在iOS中实现自定义状态栏和导航栏。 首先,我们来看如何自定义状态栏的字体颜色。iOS提供两种预设的状态栏...
在iOS开发中,用户界面的交互体验是至关重要的,尤其是导航栏(UINavigationController)的颜色变化。"ios-侧滑返回导航栏颜色变化"这个主题主要关注的是,当用户通过手势侧滑返回上一个视图控制器时,导航栏颜色...
在iOS开发中,自定义标题栏(navigationBar)和状态栏(status bar)是常见的需求,尤其是在追求独特用户体验的App设计中。本篇文章将深入探讨如何在iOS应用中实现这一功能,主要围绕`UIKit`框架中的关键组件和方法...
在iOS应用开发中,侧边导航栏(通常称为抽屉式导航或Slide-out Navigation)是一种常见的设计模式,它允许用户通过从屏幕边缘滑动来访问附加的菜单选项或功能。这种设计常见于许多应用程序,尤其是那些具有复杂层级...
好评率100%,一行代码搞定导航栏颜色、透明度、标题、状态栏、偏移等,强烈推荐 oc和swift都有 github地址:https://github.com/wangrui460/WRNavigationBar 简书实现过程地址:...
在iOS开发中,导航栏(NavigationBar)是应用界面中常见的一种元素,用于展示当前页面的标题以及提供导航功能。在标题右侧,我们通常会放置一个或者两个“返回”按钮,但有时需求可能会要求在导航栏上放置多个按钮,...