nav图文讲解(总结)

2017-04-14  本文已影响0人  池鹏程
  1. 首先是导航控制器下的视图结构
图片.png

解决的设置非透明图片后,顶栏透明自动关闭的问题:
viewDidLoad设置
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:JKRColor(255, 255, 0, 1.0)] forBarMetrics:UIBarMetricsDefault];
self.extendedLayoutIncludesOpaqueBars = YES;

viewWillDisappear设置
self.navigationController.navigationBar.translucent = YES;

解决设置完setBackgroundImage为一张非透明图片之后,展示区顶部回到0位置:再设置self.navigationController.navigationBar.translucent = YES;会回恢复展示区y为0的位置,但是设置的图片会自动加一些透明度。


1.png

会出现的问题:如果设置setBackgroundImage同时设置barTinkColor,那么图片透明会漏出_UIBarBackground的颜色。
如果设置上一级的控制器设置了setBackgroundImage,下一级的控制器设置setBackgroundImage图片为透明色后,底部_UIBarBackground的变为不透明,漏出黑色,不能穿透显示底部视图。


2.png
方法二:通过修改_UIBarBackground的背景色 图片.png

首先viewDidLoad中定义当前控制器的导航条为非透明状态,展示区不自动下移。
设置导航条背景色被透明。
遍历导航条获取到_UIBarBackground
根据透明度设置其颜色
pop时,即viewWillDisappear时重新定义导航条为透明

遇到的问题:当侧滑并返回不POP的时候,当前控制器的导航条的_UIBarBackground背景色虽然透明,但是导航条还是白色,观察发现,因为POP一半的时候走了viewWillDisappear并执行self.navigationController.navigationBar.translucent = YES;返回的时候,导致导航条内部增加了UIVisualEffectView。我尝试在viewDidAppear中遍历出这个视图移除,但是没有效果。发现控制器的view加载成功后,再次对导航条修改必须要等viewDidAppear后一段时间才可以,没有找出来原因。代码如下:


815022546DBD4216142B3EF205E5F066.png 907B3330DDA5682F7CB97A1C7F077402.gif

5.导航条下划线的隐藏:
方法一:设置navigationBar的clipsToBounds。问题:navigationBar为44高度,有背景色的时候会发现问题。
方法二:遍历出下划线的UIImageView并隐藏。原理:因为下划线的高度为0.333,以高度不大于0.4为条件便利导航条的子视图。

6.Item间距问题。
UIBarButtonItem *itemGap = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
itemGap.width = 80;
把间距的item添加到items对象数组中要添加间距的两个对象之间即可

上一篇 下一篇

猜你喜欢

热点阅读