iOS - 导航栏透明过渡

时间:2017-11-19 15:49:38

标签: ios swift uinavigationbar

我想制作一个透明细节的导航栏,但是使用我当前的代码,Bar不会返回到非透明状态。怎么解决这个问题?我想这个代码也可以在UITabBarController的MoreNavigationController中工作。

已放置在Detail ViewController中的代码。

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    self.transitionCoordinator?.animate(alongsideTransition: { [weak self](context) in
        self?.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
        self?.navigationController?.navigationBar.shadowImage = UIImage()
        }, completion: { context in
    })
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    self.transitionCoordinator?.animate(alongsideTransition: { [weak self](context) in
        self?.navigationController?.navigationBar.setBackgroundImage(nil, for: UIBarMetrics.default)
        self?.navigationController?.navigationBar.shadowImage = nil
        }, completion: { context in
    })
}

Example of the Navigation Bar

1 个答案:

答案 0 :(得分:2)

将以下代码添加到 DetailViewController
已确认此代码也适用于 UINavigationController 中的 UITabBarController

NextController.swift

class NextViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        setNavigationBar()
    }
    
    override func viewWillDisappear(_ animated: Bool) { 
        super.viewWillDisappear(true)

        self.navigationController?.navigationBar.shadowImage = nil
        self.navigationController?.navigationBar.isTranslucent = true
    }
    

    func setNavigationBar() {
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.isTranslucent = false
    }
}

预览

enter image description here

enter image description here