在 UINavigationController 子类中设置 UINavigationBar 子类

Posted

技术标签:

【中文标题】在 UINavigationController 子类中设置 UINavigationBar 子类【英文标题】:Setting UINavigationBar Subclass in UINavigationController subclass 【发布时间】:2017-01-03 20:49:44 【问题描述】:

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

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

但是我希望能够创建一个自定义UINavigationController(以编程方式),它已经将我的自定义导航栏设置为其导航栏类。我已经在这个链接上看到了如何做到这一点,但它似乎有点过时(2012 年)和“hacky AF” - https://***.com/a/9610801/2654425。我知道如何通过设置UINavigationController 的导航栏类在“故事板”中做到这一点,但我希望在我的自定义 UINavigation 控制器中以编程方式完成。

这是一个基本的UINavigationBarUINavigationController 子类:

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.
    



我不确定在哪里设置自定义导航栏。任何帮助是极大的赞赏。 :)

【问题讨论】:

尝试在 viewDidLayoutSubViews 方法中添加。 【参考方案1】:

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

【讨论】:

以上是关于在 UINavigationController 子类中设置 UINavigationBar 子类的主要内容,如果未能解决你的问题,请参考以下文章

在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?

从嵌入在 UINavigationController 中的一个视图控制器到另一个 UINavigationController

(Swift) 在嵌套在 Main UINavigationController 中的 UINavigationController 和 UITabController 之间切换

关闭 UINavigationController 并呈现另一个 UINavigationController

带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller

UINavigationController 标题和按钮