为什么要自定义导航栏?你可以需要考虑以下事情:
1.导航栏的存在方便了我们便于管理VC,但它44的高度使得用户的可视区域极大地缩小,在越小的屏幕上越突出;
2.原生的导航栏结构单一,可扩展性较小;
3.添加一些过渡性的动画会使得用户体验更好;
4.可以装逼;
等等。。。
思路:由于系统提供的bar中的控件给予我们扩展性太低,所以我们可以自定义一个view,插入到bar的最上层(这一步尽量要在初始化NaVC的时候完成,避免遮挡item)
#pragma mark 添加一个自定义view
UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, -20, [UIScreen mainScreen].bounds.size.width, 64)];
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
customView.backgroundColor = [[UIColor blueColor] colorWithAlphaComponent:0];
[self.navigationController.navigationBar insertSubview:customView atIndex:0];
这里为了方便我直接在子VC中写了,应该用一个分类或者继承来单独提出这种NaVC。
我们可以看到,通过自定义view处理的效果显然比对原始控件处理的效果好的多而且很方便便于扩展,我们可以很容易地在上面添加各种我们想要的文字或者图片,还可以做一些渐变的动画来达到良好的用户交互。(现在最常用的就是通过ScrollView来改变透明度)
推荐一个写的很好的demo:LTNavigationBar