Navigation Bar学习笔记

简介

马上就要开始做新的项目,搭完基本框架,闲来系统的纪录一下navigation相关的知识点。

开始了

目前假设有三个控制点,通过push的方法推出,具体关系如下:
vc1 -> vc2 -> vc3

接下来看我一条一条道纪录吧。

1. 看下面的动画

Navigation Bar学习笔记_第1张图片
navigation bar.gif

现象:当vc1 -> vc2时,vc1的界面停留了片刻后才消失。

结论:这是因为vc2的背景颜色为nil,可以理解为clear color,因此vc1 -> vc2后,还能看到vc1上的控件,知道vc2完全push出来后,vc1才能完全看不见(当然,具体苹果内部如何实现push效果,暂不做深究)。这个解决简单,只要设置vc2的背景颜色不为透明色就好了。

来看看实现效果吧~

Navigation Bar学习笔记_第2张图片
navigation bar.gif

2. navigation bar的透明度

不做任何设置时,navigation bar为半透明,如下图:

Navigation Bar学习笔记_第3张图片
translucent

只要设置

self.navigationController.navigationBar.translucent = NO;

就可以让让navigation bar变为不透明。

Navigation Bar学习笔记_第4张图片
no translucent

让我们通过reveal展示出来的层次图来看一下:

Navigation Bar学习笔记_第5张图片
reveal

可以看到,效果和edgesForExtendedLayout属性为UIRectEdgeLeft|UIRectEdgeRight|UIRectEdgeBottom
的效果差不多。(具体edgesForExtendedLayout属性,可以参考我以前的文章UIViewController中edgesForExtendedLayout属性的研究)

3. navigation bar的tint color

默认情况下,是蓝色的:

Navigation Bar学习笔记_第6张图片
blue
[self.navigationController.navigationBar setTintColor:[UIColor orangeColor]];

设置tintColor后,是这样的:

Navigation Bar学习笔记_第7张图片
orange
4. 返回按钮文字

如果vc1有title,则vc1 -> vc2后可以看到,返回按钮问题为前一个页面的title;如果vc1没有title,则vc1 -> vc2后可以看到,返回按钮文字默认为back。

Navigation Bar学习笔记_第8张图片
title
Navigation Bar学习笔记_第9张图片
back

要想自定义文字,有两种方法:

  • 方法一:
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:nil action:nil];

注意:如果该代码写在vc2里,则vc3的返回文字才会变为“返回”,如果想vc2中返回文字变为“返回”,则需要在vc1中设置。

记住原理:新VC的后退按钮文字 是 旧VC的一个属性
  • 方法2:
在被push出的controller(vc2、vc3)中添加代码:

```Objective-C
UIBarButtonItem *item = (UIBarButtonItem *)self.navigationController.navigationBar.topItem;
item.title = @"返回";
```

如果不想要文字肿么办?更简单了,上述方法中,title(@"返回")设置为空(@"")就好了。

系统的返回按钮总有一个返回箭头,如果想要更炫的,可以通过self.navigationItem.leftBarButtonItem来设置自己想要的效果。
5. 背景颜色

很多时候,我们都会按平时都想法直接进行设置

self.navigationController.navigationBar.backgroundColor = [UIColor purpleColor];

但是,这样设置会让你大失所望。我们可以看下reveal的分层显示,这个颜色设置的是navigation bar的背景颜色,但是其实navigationBar里面添加了UIView和UIImageView,UILabel等控件,覆盖了navigationBar,所以这种方式设置的背景颜色在前景根本看不出来。

Navigation Bar学习笔记_第10张图片
reveal
  • 方法1:
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor yellowColor]] forBarMetrics:UIBarMetricsDefault];
  • 方法2:
[self.navigationController.navigationBar setBarTintColor:[UIColor yellowColor]];

结束语

今天就暂时记录到这里,后续会慢慢再补充知识点。有问题可以相互讨论。

你可能感兴趣的:(Navigation Bar学习笔记)