转自:http://www.hangge.com/blog/cache/detail_2067.html
我们常常会发现一些 App 的导航栏背景是完全透明的,比如下面的 QQ 音乐播放界面:

由于导航栏背景透明,那么整个视图的背景便会占据全部的可视区域,从而让用户有一种沉浸式的体验。下面通过样例演示如何实现这个效果。
1,实现原理
(1)如果想让导航栏(navigationBar)透明,只需将导航栏背景图片(backgroundImage)设置为一个空的 image 即可。不过这样设置后,导航栏下方还是会有一条灰色色的分隔线。

1
2
|
//设置导航栏背景为空图片
self .navigationController?.navigationBar.setBackgroundImage( UIImage (), for : . default )
|
(2)如果要去除这个黑边,同样将导航栏的 shadowImage 设置为一个空的 image 即可。

1
2
|
//设置导航栏阴影为空图片
self .navigationController?.navigationBar.shadowImage = UIImage ()
|
2,完整样例
(1)我们在 viewWillAppear 方法中将导航栏背景设置为透明,同时在 viewWillDisappear 方法中又将其还原,这样保证导航栏透明这对当前页面有效,其他页面的导航栏不会变为透明。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import UIKit
class ViewController : UIViewController {
override func viewDidLoad() {
super .viewDidLoad()
//修改导航栏标题文字颜色
self .navigationController?.navigationBar.titleTextAttributes =
[.foregroundColor: UIColor .white]
//修改导航栏按钮颜色
self .navigationController?.navigationBar.tintColor = UIColor .white
//设置视图的背景图片(自动拉伸)
self .view.layer.contents = UIImage (named: "bg1.jpg" )!.cgImage
}
//视图将要显示
override func viewWillAppear(_ animated: Bool ) {
super .viewWillAppear(animated)
//设置导航栏背景透明
self .navigationController?.navigationBar.setBackgroundImage( UIImage (),
for : . default )
self .navigationController?.navigationBar.shadowImage = UIImage ()
}
//视图将要消失
override func viewWillDisappear(_ animated: Bool ) {
super .viewWillDisappear(animated)
//重置导航栏背景
self .navigationController?.navigationBar.setBackgroundImage( nil , for : . default )
self .navigationController?.navigationBar.shadowImage = nil
}
}
|
(2)运行效果如下:

原文出自:www.hangge.com 转载请保留原文链接:http://www.hangge.com/blog/cache/detail_2067.html