对于单个视图控制器更喜欢大标题

问题描述 投票:0回答:4

如何为导航控制器中嵌入的单个视图控制器设置大标题? 通常我只能为整个导航控制器(包括所有视图控制器)设置大标题,但我只希望一个显示大标题。

self.navigationController?.navigationBar.prefersLargeTitles = true
swift uinavigationcontroller uinavigationbar
4个回答
14
投票

虽然其他两个答案都可以解决问题,但实现此目的的一种更简洁的方法是在您想要的 UIViewController 中执行以下操作:

navigationItem.largeTitleDisplayMode = .always

或者相反的效果:

navigationItem.largeTitleDisplayMode = .never

这消除了跟踪状态的需要,在我看来这是一个巨大的进步

有关该主题的更多信息,请参阅 largeTitleDisplayMode - Apple 开发人员文档

唯一的缺点是它是iOS 11.0+


6
投票
您可以在 ViewController 将要出现时在

prefersLargeTitles = true

 中设置 
viewWillAppear
,在 ViewController 将要消失时在 
prefersLargeTitles = false
 中设置 
viewWillDisappear


override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) navigationController?.navigationBar.prefersLargeTitles = true } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) navigationController?.navigationBar.prefersLargeTitles = false }
    

1
投票
您只能实现此

viewController

的逻辑。你可以尝试这样的事情:

override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.navigationBar.prefersLargeTitles = true } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) self.navigationController?.navigationBar.prefersLargeTitles = false }
    

0
投票
只需将其放在 viewController 的

viewDidLoad()

 内即可,在推送时您不希望出现大标题。
示例:

override func viewDidLoad() { super.viewDidLoad() // This prevents displaying large title for this vc navigationItem.largeTitleDisplayMode = .never }
    
© www.soinside.com 2019 - 2024. All rights reserved.