UINavigationBar是一个我们在开发中必定会碰到的控件,用好它能帮助我们自定义导航栏的样式,所以今天讲解一下UINavigationBar的用法。 UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } @end 设置导航栏底部线条颜色的代码: UINavigationBar
-> Bool { // NavigationBar 颜色,全局设定 UINavigationBar.appearance().tintColor = UIColor.whiteColor () UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor ()] UINavigationBar.appearance().barTintColor = globalBarTintColor return true } App Screen 最后: 可以看出,上面的写法,直接是在设定 UINavigationBar 这个类的属性,所以依此类推,其他各种UI效果应该都可以这样全局设定。
@implementation UINavigationBar (UINavigationBarCategory) - (void)drawRect:(CGRect)rect { //颜色填充 //
的时候会影响 MFMessageComposeViewController 的 NavigationBar 全局设置 NavigationBar 错误代码如下: //NavigationBar 背景颜色 [[UINavigationBar appearance]setBarTintColor:NaviBarTintColor]; [[UINavigationBar appearance] setBackgroundImage:[UIImage imageWithColor:NaviBarTintColor] forBarMetrics:UIBarMetricsDefault]; [[UINavigationBar appearance] setShadowImage:[UIImage new]]; //NavigationBar 文字属性 [[UINavigationBar appearance] setTitleTextAttributes
设置UINavigationBar的titleView和UISearchBar背景透明 self.titleSearchBar = UISearchBar(frame: CGRectMake(0,0,200,44
设置背景图片(效果见下图): 导航栏设置背景图片效果对比图.png /// 统一设置导航栏外观 - (void)setNavigationBarStyle { UINavigationBar *navBar = [UINavigationBar appearance]; /** 设置导航栏背景图片 */ [navBar setBackgroundImage:
手动设置背景色及标题 UINavigationBar *navBar = [UINavigationBar appearance]; navBar.barTintColor = [UIColor
自从升级了Xcode8,以及在做iOS10的适配工作中,我发现在NavigationBar这个控件中,有了一个小小的坑。
[view isKindOfClass:[UINavigationBar class]] && [view superview] ! [view isKindOfClass:[UINavigationBar class]] && [view superview] ! 那样的话该视图下的所有的子视图的空间就会变成我们想要的那样,当然为了保险起见,该视图的父视图也就是bar的layoutMargins也置空,这样 整个bar就会跟一个普通视图一样了 左右的占位约束就不存在了 给UINavigationBar 写一个分类: #import "UINavigationBar+iOS11Spacing.h" #import <objc/runtime.h> #define kSpacerWidth kAppAdaptWidth (15) @implementation UINavigationBar (iOS11Spacing) +(void)load { static dispatch_once_t onceToken
[view isKindOfClass:[UINavigationBar class]] && [view superview] ! [view isKindOfClass:[UINavigationBar class]] && [view superview] ! 那样的话该视图下的所有的子视图的空间就会变成我们想要的那样,当然为了保险起见,该视图的父视图也就是bar的layoutMargins也置空,这样 整个bar就会跟一个普通视图一样了 左右的占位约束就不存在了 给UINavigationBar 写一个分类: #import "UINavigationBar+iOS11Spacing.h" #import <objc/runtime.h> #define kSpacerWidth kAppAdaptWidth (15) @implementation UINavigationBar (iOS11Spacing) +(void)load { static dispatch_once_t onceToken
iOS开发UINavigation系列一——导航栏UINavigtionBar 一、导航栏的使用 在iOS开发中,我们通常会使用导航控制器,导航控制器中封装了一个UINavigationBar ,实际上,我们也可以在不使用导航控制器的前提下,单独使用导航栏,在UINavigationBar中,也有许多我们可以定制的属性,用起来十分方便。 二、UINavigationBar的创建和风格类型 导航栏继承于UIView,所以我们可以像创建普通视图那样创建导航栏,比如我们创建一个高度为80的导航栏,将其放在ViewController 的头部,代码如下: UINavigationBar *bar = [[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, 320, 80)]; [self.view 我们也可以设置导航栏的风格属性,从iOS6之后,UINavigationBar默认为半透明的样式,从上面也可以看出,白色的导航栏下面透出些许背景的红色。
OK,没问题 [[UINavigationBar appearance] setBarStyle:UIBarStyleBlack]; 但是发现四个子界面中有一个还是黑色。。。 //取消半透明 [[UINavigationBar appearance] setTranslucent:NO]; //删除导航栏下部 分割线 [[UINavigationBar appearance] setShadowImage:[UIImage new]]; [[UINavigationBar appearance] setBackgroundImage:[UIImage new] forBarMetrics //半透明 [[UINavigationBar appearance] setTranslucent:YES]; //删除导航栏下部 分割线 [[UINavigationBar appearance] setShadowImage:[UIImage new]]; [[UINavigationBar appearance] setBackgroundImage:[UIImage new] forBarMetrics
UIControlState.Normal); secButton.setTitle("已评价", forState: UIControlState.Disabled); secButton.enabled = false; UINavigationBar (全局设置) Swift示例 let appear = UINavigationBar.appearance(); //设置Item的样式 appear.tintColor = UIColor.whiteColor NSForegroundColorAttributeName: UIColor.whiteColor(),NSFontAttributeName: UIFont.systemFontOfSize(18)]; OC示例 UINavigationBar *appear = [UINavigationBar appearance]; appear.tintColor = [UIColor clearColor]; appear.barTintColor ; tabbarAppear.tintColor = [UIColor colorWithRed:56.0/255 green:173.0/255 blue:255.0/255 alpha:1]; UINavigationBar
导航栏调色那些事儿 小规律: 要设置内容,全找item 要修改颜色及文字属性,找bar 1.1 改变 NavigationBar 的背景颜色 [UINavigationBar appearance].barTintColor 1.2.1 改变左右按钮的文字颜色: [UINavigationBar appearance].tintColor = [UIColor whiteColor]; 1.2.2 改变标题的文字颜色 字典对应了一个系统自带的 KEY,就是 1,NSFontAttributeName:表示要穿一个字体UIFont 2,NSForegroundColorAttributeName:表示要传一个颜色 [[UINavigationBar [[UINavigationBar appearance] setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];[[UINavigationBar
中有效, 或者是UINavagaitonController中的RootController 中设置有效 - (void)setNavigationControllerAppearance { [UINavigationBar appearance].barStyle = UIBarStyleBlack; [[UINavigationBar appearance] setBarTintColor:[UIColor colorWithWhite:0.1 alpha:0.5]]; [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; } //也可以设置成图片 [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nav"] forBarMetrics
*navigationBar =[UINavigationBar appearance];//获取所有导航条外观 //方式二:获取我们自己导航控制器的导航条-- 确保系统的其它功能(短信)的导航条与自己的冲突 ,尤其在短信分享这方面要注意 UINavigationBar *navigationBar; if (IOS9) { //9.0的API navigationBar = [UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[[HWNavigationController class]]]; }else{ navigationBar = [UINavigationBar appearanceWhenContainedIn:[HWNavigationController class 1.3 设置导航条渐变颜色 setupUINavigationBarsetBackgroundImage + (void)setupUINavigationBarsetBackgroundImage:(UINavigationBar
Title的颜色和字体大小 替换系统返回按钮的图片,设计说自带的太丑,一开始是自定义返回的View,后来发现不用那么麻烦,直接有方法可以替换 // 设置navBar背景,这样设置可去掉那个黑线 [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]]; [[UINavigationBar appearance] setTranslucent:NO] ; // 设置navBar的按钮的tintColor,及title字体大小和颜色 [[UINavigationBar appearance] setTintColor:[UIColor whiteColor ]]; [[UINavigationBar appearance] setTitleTextAttributes:@{NSFontAttributeName: [UIFont fontWithName: appearance] setBackIndicatorImage:[UIImage imageNamed:@"icon_white"]]; [[UINavigationBar appearance]
UINavigationBar和UINavigationItem的关系 UINavigationBar是 UINavigationController 的属性,其属性设置会影响内部所有的 UIViewController UINavigationBar内部也维持一个栈,栈中存放的是一个个 UINavigationItem。 因此UINavigationBar的栈和 UINavigationController 的栈一一对应。 颜色问题 UINavigationBar 的颜色:可以通过 UINavigationBar 的barTintColor设置。 UINavigationBar 上面内容的渲染颜色:默认情况下,按钮或系统图片按钮都会渲染成蓝色,可以通过 UINavigationBar 的tintColor设置。
代码如下: - (void)updateNavigationBarColor:(UIColor *)color { UINavigationBar *bar = self.navigationController.navigationBar setBackgroundImage:[UIImage wps_createImageWithColor:color] forBarMetrics:UIBarMetricsDefault]; } 参考 How to hide UINavigationBar
UINavinationBar之外,还有工具栏UIToolBar可以供我们使用,工具栏和导航栏十分类似,只是功能更加简单,工具栏中也有UIBarButtonItem按钮,在前两篇博客中,对导航栏和导航项都进行的讨论,地址如下: UINavigationBar 下面是UIToolBar中的一些方法,其中大部分在UINavigationBar中都有涉及,这里只做简单的介绍: //工具栏的风格,和导航栏类似,有黑白两种 @property(nonatomic) UIBarStyle