日常开发中少不了用到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的更多相关文章

  1. iOS 自定义NavigationBar右侧按钮rightBarButtonItem

    自定义右侧的一个按钮 UIBarButtonItem *myButton = [[UIBarButtonItem alloc] initWithTitle:@"主页" style: ...

  2. iOS 自定义NavigationBar右侧按钮rightBarButtonItem--button

    //两个按钮的父类view UIView *rightButtonView = [[UIView alloc] initWithFrame:CGRectMake(, , , )]; //历史浏览按钮 ...

  3. 关于iOS自定义UITabBar的几种方法

    作为iOS开发最常用的两个多视图控制器 NavigationController 和 TabBarController 已经很强大了,基本上在大部分的应用中都能看到它们的影子.但是在使用的过程中,系统 ...

  4. 【iOS自定义键盘及键盘切换】详解

    [iOS自定义键盘]详解 实现效果展示: 一.实现的协议方法代码 #import <UIKit/UIKit.h> //创建自定义键盘协议 @protocol XFG_KeyBoardDel ...

  5. iOS自定义的UISwitch按钮

    UISwitch开关控件 开关代替了点选框.开关是到目前为止用起来最简单的控件,不过仍然可以作一定程度的定制化. 一.创建 UISwitch* mySwitch = [[ UISwitchalloc] ...

  6. 如何实现 iOS 自定义状态栏

    给大家介绍如何实现 iOS 自定义状态栏 Sample Code: 01 UIWindow * statusWindow = [[UIWindow alloc] initWithFrame:[UIAp ...

  7. iOS8 自定义navigationbar 以及 UIBarButtonItem 边距问题

    一.自定义navigationbar - (void)initNavigationBar{ [self.navigationController setNavigationBarHidden:YES] ...

  8. iOS自定义组与组之间的距离以及视图

    iOS自定义组与组之间的距离以及视图 //头视图高度 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(N ...

  9. iOS 自定义转场动画

    代码地址如下:http://www.demodashi.com/demo/12955.html 一.总效果 本文记录分享下自定义转场动画的实现方法,具体到动画效果:新浪微博图集浏览转场效果.手势过渡动 ...

随机推荐

  1. Codeforces Round #336 (Div. 2) C. Chain Reaction set维护dp

    C. Chain Reaction 题目连接: http://www.codeforces.com/contest/608/problem/C Description There are n beac ...

  2. HDU 5596 GTW likes gt 倒推

    GTW likes gt 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5596 Description Long long ago, there w ...

  3. C#中简单调用MD5方法以及MD5简介

    MD5简介:          MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2.M ...

  4. 【JavaScript】JS的启动机制

    DOM  Event------------------>触发function() function  自身的调用 主要就是调用function 1.DOM Event 2.调用function

  5. PHP CLI模式开发(转)

    PHP CLI模式开发不需要任何一种Web服务器(包括Apache或MS IIS等),这样,CLI可以运行在各种场合. 有两种方法可以运行PHP CLI脚本. 第一种方法是使用php -f /path ...

  6. boost.asio源码剖析(五) ---- 泛型与面向对象的完美结合

    有人说C++是带类的C:有人说C++是面向对象编程语言:有人说C++是面向过程与面向对象结合的语言.类似的评论网上有很多,虽然正确,却片面,是断章取义之言. C++是实践的产物,C++并没有为了成为某 ...

  7. IOS实用功能之截图(来自相册和拍照)

    // //  ViewController.m //  MyImagePicker1.0 // //  Created by Mac on 14-7-14. //  Copyright (c) 201 ...

  8. 0c-39-ARC下单对象内存管理

    1.ARC工作原理详述 ARC是Objective-C编译器的特性,而不是运行时特性或者垃圾回收机制,ARC所做的只不过是在代码编译时为你自动在合适的位置插入release或autorelease A ...

  9. ubuntu搭建LAMP服务器

    新手记录下...... 安装apache apt-get install apache2 安装mysql apt-get install mysql-server 安装php apt-get inst ...

  10. 基于HTML5的捕鱼达人游戏网页版

    之前给大家分享了html5实现的水果忍者,愤怒的小鸟,中国象棋游戏.今天给大家分享一款捕鱼达人(fishjoy)网页版游戏的源码.可以在线玩也可以下载到本地.它使用html5技术和javascript ...