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 一.总效果 本文记录分享下自定义转场动画的实现方法,具体到动画效果:新浪微博图集浏览转场效果.手势过渡动 ...
随机推荐
- Codeforces Round #311 (Div. 2) A. Ilya and Diplomas 水题
A. Ilya and Diplomas Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/557/ ...
- TP复习7
//编写search方法,实现搜索 public function search(){ //获取post的数据,根据数据组装查询的条件,根据条件从数据库中获取数据,返回给页面中遍历 if(isset( ...
- shell 编程中使用到得if语句内判断参数
http://blog.chinaunix.net/uid/21411227/cid-63616-list-1.html 1.判断文件类型 –b 当file存在并且是块文件时返回真 -c 当fil ...
- BIOS 深入学习 转
http://blog.csdn.net/lightseed/article/category/547391
- php 日期
获取两个日期之间的间隔天列表: $begin = new DateTime( '2012-08-0' );$end = new DateTime( '2012-08-31' );$end = $end ...
- 项目源码--Android迷幻岛屿综合游戏
下载源码 技术要点: 1.游戏开发综合技术 2.多线程机制实现游戏逻辑 3.自定义控件,系统控件等综合图层的使用 4.图层素材动画的综合技术 5.游戏算法的实现 6. OpenGL ES的综合使用 7 ...
- BootStrap2学习日记14----导航
<div class="navbar navbar-inverse navbar-fixed-top"> <div class="navbar-inne ...
- Load Balancing 折半枚举大法好啊
Load Balancing 给出每个学生的学分. 将学生按学分分成四组,使得sigma (sumi-n/4)最小. 算法: 折半枚举 #include <iostrea ...
- Solr 删除数据的几种方式
原文出处:http://blog.chenlb.com/2010/03/solr-delete-data.html 有时候需要删除 Solr 中的数据(特别是不重做索引的系统中,在重做索引期间).删除 ...
- iOS 抓取 UIwebview 上 所有 图片 并进行滚动播放
关于在UIwebview上添加滚动图片 两种滚动手势会混淆,应为webview有webview.scrollview的属性 故参照昨天的随笔 scrollview嵌套解决方案. 本篇随笔主要讲循环使用 ...