在 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 控制器中以编程方式完成。
这是一个基本的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.
我不确定在哪里设置自定义导航栏。任何帮助是极大的赞赏。 :)
【问题讨论】:
尝试在 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