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 指不透明。
下图形象的展示了三个词的意思
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 属性是一个相等的关系。