Ios 如何在Swift中从扩展调用函数到UIViewController
我正在尝试使我的Ios 如何在Swift中从扩展调用函数到UIViewController,ios,swift,uinavigationcontroller,uinavigationbar,ios-extensions,Ios,Swift,Uinavigationcontroller,Uinavigationbar,Ios Extensions,我正在尝试使我的导航栏透明。当我在同一个ViewController中创建函数时,它可以工作,但是我想在许多其他ViewController中重用它,因此我决定使用扩展UINavigationController。当我尝试将函数调用到ViewDidLoad中时,它不起作用 import UIKit class StudentsViewController: UIViewController { override func viewDidLoad() { super.v
导航栏
透明。当我在同一个ViewController
中创建函数时,它可以工作,但是我想在许多其他ViewController
中重用它,因此我决定使用扩展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()
}
}
由于您决定为导航控制器编写扩展,因此必须从其预期角度编写扩展:
import UIKit
extension UINavigationController {
func makeNavigationBarTransparent() {
self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
}
}
您不需要在navigationController?
extension UINavigationController {
func makeNavigationBarTransparent() {
navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationBar.shadowImage = UIImage()
}
}
这是因为您的viewController尚未放置在导航堆栈中。如果您的vc未置于导航堆栈中,则self.navigationController将返回nil
尝试移动makeNavigationBarTransparent()调用视图将出现方法。确保self.navigationController!=无
@MahendraGP你读过这个问题吗?@AshleyMills,这只是一个建议。他还说,在其他视图中,控制器不工作,所以。。。