1、导航栏的修改

导航栏修改的原则:谁修改,谁复原。

导航栏修改的时机,两个节点:viewWillApper 和 viewWillDisapper。

1>隐藏和显示导航栏

注意:

①OC中的setNavigationBarHidden: animated: 和 setNavigationBarHidden: 的效果不一样,setNavigationBarHidden: 会造成导航栏转场的过程中闪现和背景错乱等问题,建议使用带有 animated 参数的 API

②push和pop方法中也带有 animated 参数,尽量保证与 setNavigationBarHidden: animated: 中的 animated 参数一致。

在同一个控制器中调用
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    // 隐藏
    navigationController?.navigationBar.isHidden = true
}
    
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    // 显示
    navigationController?.navigationBar.isHidden = false
}

2>导航栏颜色的修改

iOS7之后,导航栏增加了 translucent 效果,使的导航栏背景出现2种情况:

①  translucent 为 YES 时,更改导航栏的背景色;

② translucent 为 NO 时,更改导航栏的背景色。

第一种情况,我们需要调用 UINavigationBar 的 setBackgroundColor 方法。

第二种情况,我们需要调用 UINavigationBar 的 setBackgroundImage: forBarMetrics: 方法。

对于第二种情况需要注意:

1️⃣在设置透明效果时,我们可以直接设置一个 [UIImage new] 创建的对象,无须创建一个颜色为透明色的图片。

2️⃣在使用 setBackgroundImage: forBarMetrics: 方法的过程中,如果图片的 alpha 值小于 1.0 则 translucent 的值为 YES,反之为 NO。即,如果想让导航栏是纯色且无 translucent 效果,请保证所有的像素点的 alpha 值等于1。

3️⃣translucent的优先级更高,如果 translucent 为YES,图片不透明时,系统会为图片添加一个透明度,使其符合 translucent 效果。如果 translucent 为NO,图片带有透明效果,系统会在这个带有透明效果的图片背后,添加一个不透明的纯色图片用于整体效果的合成。纯色图片的颜色取决于  barStyle 属性,当属性为 UIBarStyleBlack 时为黑色;当属性为 UIBarStyleDeafault 时为白色;如果我们设置了 barTintColor,则以设置的颜色为基准。

3、transparent、translucent、opaque、alpha和opacity的区别

transparent、translucent、opaque:用于描述物体的透光强度,一般都是 BOOL 类型。

1>transparent 指透明。

2>translucent 指半透明,类似磨砂效果。

3>opaque 指不透明。 

下图形象的展示了三个词的意思

iOS修改导航条返回图片 苹果怎么更改导航键_translucent

alpha和opacity 表示的是透明度,都是 CGFloat 类型。在 iOS 中说 alpha 时,要区分是在说 view 的 alpha 属性,还是说颜色通道里的 alpha。我们可以通过 alpha 通道单独的去设置 backgroundColor、borderColor,它们互不影响,且有着独立的 alpha 通道,我们也可以通过 opacity 统一设置整个 view 的透明度。且, iOS 中,view不光拥有独立的 alpha 属性,同时也是基于 CALayer,所以我们可以看到任意 UIView 对象下面都会有一个 layer 的属性,用于表明 CALayer 对象。view 的 alpha 属性与 layer 里面的 opacity 属性是一个相等的关系。

iOS修改导航条返回图片 苹果怎么更改导航键_隐藏显示导航栏_02