Skip to content

Welcome to the JZNavigationExtension wiki!

Qiun Cheng edited this page Oct 10, 2018 · 5 revisions

关于几个API的使用说明:

jz_navigationBarHidden
jz_navigationBarBackgroundAlpha
jz_navigationBarTintColor
jz_navigationInteractivePopGestureEnabled

这几个API行为一致,如果从来没有设置过某一个属性,那么就读导航控制器的该属性值作为默认值,如果导航控制器也没有设置过该属性,那么它们不会做任何操作。所以可以通过设置导航控制器的其中一个属性作为全局的配置。

就用jz_navigationBarHidden打比方

比如:A控制器从来没有设置过jz_navigationBarHidden,那么当push到它的时候,会读A.navigationController.jz_navigationBarHidden,如果navigationController也没有设置过,那么就不会有任何操作,当前导航栏显示就显示,不显示就不显示。

这样做的解释

每个项目对这几个属性期待的默认值是不同的,所以总结原因有以下几点:


1、工程影响最小化:

如果没有设置过这几个属性,不会对导航栏做任何操作,这样有效的避免了集成JZNavigationExtension以后,会莫名其妙的对导航栏造成影响。

2、调用最简化:

只需要在三个属性中有不同的两个控制器之间进行设置即可。

举个例子:

设控制器A..B..C.....Z是连续Push、Pop关系,并且只有“D”的导航栏想要显示,其它控制器的导航栏都想要隐藏。有两个办法实现这个需求,下面为伪代码。

  • 方法一:
A.jz_navigationBarHidden = true;
D.jz_navigationBarHidden = false;
C.jz_navigationBarHidden = true; //C与D相邻且jz_navigationBarHidden值不同
E.jz_navigationBarHidden = true; //D与E相邻且jz_navigationBarHidden值不同

对于C、E设置的代码也完全可以写在能拿到它们实例的D控制器里,而不需要分散设置。

  • 方法二:
navigationController.jz_navigationBarHidden = true;
D.jz_navigationBarHidden = false;

配置导航控制器的该值作为全局默认,为单独某个控制器设置即可。