Как вызвать функцию из расширения UIViewController в Swift - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь сделать мой 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()
    }
}

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Вам не нужно на navigationController?.

extension UINavigationController {
    func makeNavigationBarTransparent() {
        navigationBar.setBackgroundImage(UIImage(), for: .default)
        navigationBar.shadowImage = UIImage()
    }
}
0 голосов
/ 29 мая 2018

Это потому, что ваш viewController еще не помещен в ваш стек навигации.Если ваш vc не помещен в стек навигации, self.navigationController вернет nil .

Попробуйте переместить makeNavigationBarTransparent () вызов в viewWillAppear метод.

0 голосов
/ 29 мая 2018

Поскольку вы решили написать расширение для контроллера навигации, вы должны написать его исходя из его перспективы:

import UIKit

extension UINavigationController {
    func makeNavigationBarTransparent() {
        self.navigationBar.setBackgroundImage(UIImage(), for: .default)
        self.navigationBar.shadowImage = UIImage()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...