Ios 在UINavigationController子类中设置UINavigationBar子类

Ios 在UINavigationController子类中设置UINavigationBar子类,ios,uinavigationcontroller,swift3,uinavigationbar,subclass,Ios,Uinavigationcontroller,Swift3,Uinavigationbar,Subclass,我有一个子类UINavigationBar,我想创建一个子类UINavigationController,它使用这个UINavigationBar子类。我知道如何将默认的UINavigationController设置为使用自定义导航栏 让navController=UINavigationController(navigationBarClass:CustomNavigationBar.self,toolbarClass:nil) 但是,我希望能够创建一个自定义UINavigationCont

我有一个子类
UINavigationBar
,我想创建一个子类
UINavigationController
,它使用这个
UINavigationBar
子类。我知道如何将默认的
UINavigationController
设置为使用自定义导航栏

让navController=UINavigationController(navigationBarClass:CustomNavigationBar.self,toolbarClass:nil)

但是,我希望能够创建一个自定义
UINavigationController
(以编程方式),它已经将我的自定义导航栏设置为其导航栏类。我已经看到了如何在这个链接,但它似乎有点过时(2012年)和“黑客AF”-。我知道如何通过设置
UINavigationController
的导航栏类在“故事板”中实现,但我希望在自定义UINavigation控制器中以编程方式实现这一点

下面是一个基本的
UINavigationBar
UINavigationController
子类:

class CustomNavigationBar: UINavigationBar {

    override init(frame: CGRect) {
        super.init(frame: frame)

    }
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!


    }

    override func draw(_ rect: CGRect) {
        self.backgroundColor = UIColor.red
    }


}

class CustomNavigationController: UINavigationController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

我不确定在哪里设置自定义导航栏。非常感谢您的帮助。:)

应该在实例化UINavigationController子类时设置。具体来说,是UINavigationController.init(navigationBarClass:AnyClass?,toolbarClass:AnyClass?)。请参阅苹果的文档。

尝试添加viewDidLayoutSubViews方法。