我想让Navigation bar
变得透明。它在我在同一ViewController
内创建函数时有效,但是我想在许多其他ViewControllers
中重复使用它,所以我决定使用extension
扩展UINavigationController
。当我尝试将函数调用到ViewDidLoad
时,它无法正常工作。
import UIKit
class StudentsViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.makeNavigationBarTransparent()
}
}
这是我的扩展
import UIKit
extension UINavigationController {
func makeNavigationBarTransparent() {
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationController?.navigationBar.shadowImage = UIImage()
}
}
答案 0 :(得分:1)
由于您决定编写导航控制器的扩展名,因此必须从其预期编写:
import UIKit
extension UINavigationController {
func makeNavigationBarTransparent() {
self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
}
}
答案 1 :(得分:1)
您不需要navigationController?.
extension UINavigationController {
func makeNavigationBarTransparent() {
navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationBar.shadowImage = UIImage()
}
}
答案 2 :(得分:1)
这是因为你的viewController还没有放在你的导航堆栈中。如果你的vc没有放在导航堆栈中,那么self.navigationController将返回 nil 。
尝试将 makeNavigationBarTransparent()调用移至 viewWillAppear 方法。