iOS自定义NavigationBar
日常开发中少不了用到UINavigationController,但是很多情况都要自定义NavigationBar。依稀记得自己刚开始也踩了好多坑,凑今天有空,就把想到的写下来。有时间了,考虑再把自定义TabBar写一下。
1.修改Navigationbar
navigationBar其实有三个子视图,leftBarButtonItem,rightBarButtonItem,以及titleView。
1.1 方法一:alloc一个UINavigationBar ,并给alloc出来的NavigationBar设置button及view,与系统的NavigationBar没有着明显区别。如果在没有NavigationController管理的时候想要添加一个NavigationBar,就这方法还是可以的。。。但是添加到可以滚动的视图(如tableView)的时候,会随着视图的滚动而滚动,不建议使用,代码就不贴了。
1.2 方法二: 修改系统UINavigationBar的leftBarButtonItem,rightBarButtonItem,以及titleView
//设置左button
UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithTitle:@"left" style:UIBarButtonItemStyleDone target:self action:@selector(test)];
self.navigationItem.leftBarButtonItem = leftItem;
//设置右button UIBarButtonItem *rightItem = [[UIBarButtonItem alloc] initWithTitle:@"button" style:UIBarButtonItemStyleDone target:self action:@selector(test)];
self.navigationItem.rightBarButtonItem = rightItem;
//修改titleView字体颜色
NSDictionary *dic = [NSDictionary dictionaryWithObject:[UIColor redcolor] forKey:NSForegroundColorAttributeName];
self.navigationController.navigationBar.titleTextAttributes = dict;
navigationBar的半透明效果,可以通过
self.navigationController.navigationBar.translucent = NO;
关闭。
1.3 隐藏navigationBar,自定义View代替navigationBar
此方法简单粗暴。自定义性强,一个普通的UIView,可以在任何位置放置自己想要的任何控件,设置各种颜色。
问题在与子视图布局的时候需要注意起始Y值为64(状态栏20 + navigationBar 44)。视图过多的时候是很让人崩溃的一件事。
self.navigationController.navigationBarHidden = NO;
self.headerView = [[[NSBundle mainBundle] loadNibNamed:@"HeaderView" owner:nil options:nil]lastObject];
[self.headerView.menuButton addTarget:self action:@selector(showMenu:) forControlEvents:UIControlEventTouchUpInside];
self.headerView.frame = CGRectMake(, , kScreenW, );
[self.view addSubview:self.headerView];
1.4 将自定义View添加到titleView上
不隐藏navigationBar,然后将自定义的View添加到titleView上,好处在于,不用考虑坐标问题。和系统的navigationBar使用起来一样简单,还增加了自定义性。唯一不足是titleView的frame不是整个navigationBar,看起来颜色不统一,解决方法是将navigationBar背景颜色调整为和自定义View一样。
self.navigationController.navigationBarHidden = NO;
HeaderView *headerView = [[[NSBundle mainBundle] loadNibNamed:@"HeaderView" owner:nil options:nil]lastObject];
headerView.frame = CGRectMake(, , kScreenW, );
self.navigationController.navigationBar.translucent = NO;
self.navigationItem setHidesBackButton = YES;
//navigationBar颜色与headerView颜色相同
self.navigationController.navigationBar.backgroundColor = [UIColor whiteColor];
self.navigationItem.titleView = headerView;
iOS自定义NavigationBar的更多相关文章
- iOS 自定义NavigationBar右侧按钮rightBarButtonItem
自定义右侧的一个按钮 UIBarButtonItem *myButton = [[UIBarButtonItem alloc] initWithTitle:@"主页" style: ...
- iOS 自定义NavigationBar右侧按钮rightBarButtonItem--button
//两个按钮的父类view UIView *rightButtonView = [[UIView alloc] initWithFrame:CGRectMake(, , , )]; //历史浏览按钮 ...
- 关于iOS自定义UITabBar的几种方法
作为iOS开发最常用的两个多视图控制器 NavigationController 和 TabBarController 已经很强大了,基本上在大部分的应用中都能看到它们的影子.但是在使用的过程中,系统 ...
- 【iOS自定义键盘及键盘切换】详解
[iOS自定义键盘]详解 实现效果展示: 一.实现的协议方法代码 #import <UIKit/UIKit.h> //创建自定义键盘协议 @protocol XFG_KeyBoardDel ...
- iOS自定义的UISwitch按钮
UISwitch开关控件 开关代替了点选框.开关是到目前为止用起来最简单的控件,不过仍然可以作一定程度的定制化. 一.创建 UISwitch* mySwitch = [[ UISwitchalloc] ...
- 如何实现 iOS 自定义状态栏
给大家介绍如何实现 iOS 自定义状态栏 Sample Code: 01 UIWindow * statusWindow = [[UIWindow alloc] initWithFrame:[UIAp ...
- iOS8 自定义navigationbar 以及 UIBarButtonItem 边距问题
一.自定义navigationbar - (void)initNavigationBar{ [self.navigationController setNavigationBarHidden:YES] ...
- iOS自定义组与组之间的距离以及视图
iOS自定义组与组之间的距离以及视图 //头视图高度 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(N ...
- iOS 自定义转场动画
代码地址如下:http://www.demodashi.com/demo/12955.html 一.总效果 本文记录分享下自定义转场动画的实现方法,具体到动画效果:新浪微博图集浏览转场效果.手势过渡动 ...
随机推荐
- 关于ORACLE DUAL表
1.DUAL表的用途 Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中--查看当前连接用户 SQL> select user from d ...
- window.showModalDialog 与window.open传递参数的不同?
简单的说,就是一个在弹出窗口之后可以做其它的事,即window.open 另一个在弹出窗口之后不能做其它的事,只能是关闭了当前的窗口之后才能做其它的事,即window.showModalDialog ...
- 三星Galaxy S4(GT-I9500)获取ROOT权限教程(转)
http://news.candou.com/2013-05-20/453695_1.shtml 获取root权限的方法
- 在C++中使用golang的协程
开源项目cpp_features提供了一个仿golang协程的stackful协程库. 可以在c++中使用golang的协程,大概语法是这样的: #include <iostream> v ...
- NUMA
- Shell中的函数
一.在脚本中定义函数 与变量一样,在使用函数之前应该对函数进行定义.与其他编程类语言相比,由于没有数据类型的概念,因此也不必定义函数的类型. (1)在脚本中可以使用以下方式定义函数: function ...
- Selenium1(RC)与Selenium2(WebDriver)的概念介绍
最近网上学习了Selenium1和selenium2,自己做一些总结,方便以后查阅. 部分内容引用: http://www.cnblogs.com/hyddd/archive/2009/05/30/1 ...
- c++ 构造函数,拷贝构造函数,析构函数与赋值操作符
题目: 为下面的Rectangle类实现构造函数,拷贝构造函数,赋值操作符,析构函数. class Shape { int no; }; class Point { int x; int y; }; ...
- 【阿里云产品公测】阿里云ACE部署通用完整教程及评测
[阿里云产品公测]阿里云ACE部署通用完整教程及评测 作者:阿里云用户bailimei ACE应该是目前在公测的服务中应用最广泛的一项服务.在公测云引擎ACE前曾使用过新浪SAE,而ACE给我的最初印 ...
- 明风:分布式图计算的平台Spark GraphX 在淘宝的实践
快刀初试:Spark GraphX在淘宝的实践 作者:明风 (本文由团队中梧苇和我一起撰写,并由团队中的林岳,岩岫,世仪等多人Review,发表于程序员的8月刊,由于篇幅原因,略作删减,本文为完整版) ...