关于自定义导航栏的那些事儿 UINavigationController

本文只是把我看到的关于自定义导航栏的一些资料搜集了一下

自定义导航栏样式的方法有两种:

1.通过 [UINavigationBar apperance]  来给整个应用上的所有的navigationbar添加样式,这是一个全局的样式设置。

2.当然如果你想要给当前的某一特定的navigationbar添加特定样式就可以通过self.navigationController.navigatinoBar 找到当前bar实例,再进行样式设置。

第二种方法,想必大家都知道,相关资料一搜一大把,不累赘了。

主要说说第一种方法,如果给整个应用的话,可以自定义一个CustomNavigationController继承自UINavigationController,然后在CustomNavController中重写init方法

+ (void)initialize {

// 1.appearance方法返回一个导航栏的外观对象

//修改了这个外观对象,相当于修改了整个项目中的外观

UINavigationBar *navigationBar = [UINavigationBarappearance];

[navigationBarsetBarTintColor:kColorNavBar];

[navigationBar
setTintColor:[UIColorwhiteColor]];// iOS7的情况下,设置NavigationBarItem文字的颜色

// 3.设置导航栏文字的主题

NSShadow *shadow = [[NSShadowalloc]init];

[shadowsetShadowOffset:CGSizeZero];

[navigationBar
setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColorwhiteColor],

NSShadowAttributeName : shadow}];

//    [navigationBar setBackgroundImage:[UIImage imageNamed:@"ic_cell_bg_selected"] forBarMetrics:UIBarMetricsDefault];

// 4.修改所有UIBarButtonItem的外观

UIBarButtonItem *barButtonItem = [UIBarButtonItemappearance];

if (kIsIOS7OrMore) {

[barButtonItemsetTintColor:[UIColorwhiteColor]];

}else {

//
修改item的背景图片

//[barItem setBackgroundImage:[UIImage imageNamed:@"navigationbar_button_background.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

//[barItem setBackgroundImage:[UIImage imageNamed:@"navigationbar_button_background_pushed.png"] forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

//
修改item上面的文字样式

NSDictionary *dict =@{NSForegroundColorAttributeName : [UIColorwhiteColor],

NSShadowAttributeName : shadow};

[barButtonItem
setTitleTextAttributes:dictforState:UIControlStateNormal];

[barButtonItem
setTitleTextAttributes:dictforState:UIControlStateHighlighted];

}

//修改返回按钮样式

//    [barButtonItem setBackButtonBackgroundImage:[UIImage imageNamed:@"ic_back"] forState:UIControlStateNormal barMetrics:UIBarMetricsCompact];

// 5.设置状态栏样式

[[UIApplicationsharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];

}

如果想要统一定制返回按钮样式的话,可以重写如下方法

//重写返回按钮

-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated

{

[superpushViewController:viewControlleranimated:animated];

if (viewController.navigationItem.leftBarButtonItem ==nil
&& self.viewControllers.count >1) {

viewController.navigationItem.leftBarButtonItem = [selfcreatBackButton];

}

}

-(UIBarButtonItem *)creatBackButton

{

return [[UIBarButtonItemalloc]initWithImage:[UIImageimageNamed:@"ic_back"]style:UIBarButtonItemStylePlaintarget:selfaction:@selector(popSelf)];

//或[[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(popSelf)];

}

-(void)popSelf

{

[selfpopViewControllerAnimated:YES];

}

另外,说点导航栏的小细节:

ios7  之后,默认样式的状态栏和导航栏是连在一起的,但是实际上导航栏的位置和大小是和之前系统版本一样的,依然是贴在状态栏下面,依然是高44px;之所以用户看来它们是连在一起,这是因为UINavigationBar里面的_UINavigationBarBackground定位在y方向-20px的位置,然后高度增加到64px,这样就可以同时充当了两者的背景。所以你需要提供高度为64px的导航条背景图。

时间: 2024-11-12 06:14:46

关于自定义导航栏的那些事儿 UINavigationController的相关文章

自定义导航栏

1.设置导航栏样式 [self.navigationBar setBackgroundImage:[UIImage imageNamed:@"navibarbackground"] forBarMetrics:UIBarMetricsDefault]; [self.navigationBar setTintColor:[UIColor whiteColor]];//BarItem颜色 NSShadow *shadow = [NSShadow new]; shadow.shadowCol

iOS 自定义导航栏笔记

一.UINavigationBar的结构 导航栏几乎是每个页面都会碰到的问题,一般两种处理方式:1.隐藏掉不显示 2.自定义 1. 添加导航栏 TestViewController * mainVC = [[TestViewController alloc] init]; UINavigationController * nav = [[UINavigationController alloc] initWithRootViewController:mainVC]; self.window.ro

一些关于iOS系统导航栏与自定义导航栏的事情

关于系统导航栏是真的让人又爱又恨,爱的是苹果本身对这个控件的封装已经是很完美了,包括内存.美化.渐变动画等等,一般来说,基本上所有需求都可以满足的.但是你要知道什么东西到了中国,就会发生翻天覆地的变化,例如后台的数据并发.在国内奇葩的产品设计之下,导航栏也是面目全非,反正我看了比较著名的APP,发现他们的导航栏基本都是自定义,其中牵扯最大的问题就是导航栏自身的隐藏.颜色渐变. 其实通过APP运行时,你可以看到系统NavigationBar的分层.一个navigationBar是分很多层的,并非我

实际iOS编程中遇到的自定义导航栏按钮,导致手势返回失效的解决方法

1\在实际编程过程中往往需要自定义导航栏上面的按钮,也就用: - (instancetype)initWithCustomView:(UIView *)customView; 但用了这个方法后可能会导致iOS7,8的手势返回失效,解决方法就是在自定义的导航栏的viewDidLoad方法中添加如下代码 注意:只有用系统的导航栏,或者继承于系统的导航栏才可以用Push方法,并且自带返回手势. - (void)viewDidLoad { [super viewDidLoad]; __weak type

自定义导航栏标题按钮

自定义标题栏按钮 @implementation SNTitleButton - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { //图片居中 self.imageView.contentMode = UIViewContentModeCenter; //字体居右 self.titleLabel.textAlignment = NSTextAlignmentRight; //字体

React Native自定义导航栏

之前我们学习了可触摸组件和页面导航的使用的使用: 从零学React Native之09可触摸组件 - 从零学React Native之03页面导航 - 经过之前的学习, 我们可以完成一个自定义导航栏了, 效果如下: 我们需要创建一个 NaviBar.js 用来显示顶部的导航栏, 还需要四个界面(Page1.js,Page2.js,Page3.js,Page4.js). 当然还需要修改index.android.js或者index.ios.js 用来处理4个界面的切换. 导航栏NaviBar 实现

ios7以上自定义导航栏标题的字体大小及颜色的方法

自定义导航栏的字体和颜色,只需要自定义一个lable,然后将lable添加到导航栏的titleview中就可以了 代码如下 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,0,0)];//这个frame是初设的,没关系,后面还会重新设置其size. [label setNumberOfLines:0]; UIFont *font = [UIFont fontWithName:@"Arial" size:17]

自定义导航栏返回按钮文字

自定义导航栏返回按钮文字 by 伍雪颖 navigationItem.backBarButtonItem = UIBarButtonItem(title: "返回", style: UIBarButtonItemStyle.Plain, target: nil, action: nil)

解决 ios7.0 以后自定义导航栏左边按钮靠右的问题

解决 ios7.0 以后自定义导航栏左边按钮靠右的问题 www.111cn.net 编辑:edit02_lz 来源:转载 最近开发了一个ios的app,在ios7.0+出现自定义导航栏左边按钮出现靠右的情况,后来自己解决了,解决办法如下 1.自定义按钮  代码如下 复制代码 //左按钮UIButton *leftBtn = [[UIButton alloc]initWithFrame:RectWithPara(-20, 0, 44, 44)];[leftBtn addTarget:self ac