如何让导航栏在转回时显示大标题?

Posted

技术标签:

【中文标题】如何让导航栏在转回时显示大标题?【英文标题】:How to get the navigation bar to show large title upon a segue back? 【发布时间】:2019-09-23 17:04:14 【问题描述】:

我有一个标签栏应用程序,其中一个视图是 UITableViewController,其中包含静态单元格作为内容,具有 1 节和 1 行。

我希望将大标题设置为“始终”,因此我在情节提要上进行了选择,而模拟器上的标题很大。现在,当用户点击“开始聊天”时,应用程序将转到虚拟助手视图控制器,其中大标题在情节提要上设置为“从不”。现在的问题是,当用户使用“开始聊天”表格视图单元格回到上一个视图控制器时,标题不再大了。

有趣的是,当我将表格视图设置为可滚动时,在向下拖动表格视图时,标题又变大了。我确保使用“首选大标题”检查了导航控制器故事板上的导航栏。我使用的是 Xcode 11,使用 Xcode 10 时这不是问题。

我尝试使用开始聊天按钮为视图创建一个自定义类,但这段代码无法使标题变大:

override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)
    navigationController?.navigationItem.largeTitleDisplayMode = .always
    navigationController?.navigationBar.prefersLargeTitles = true

我还能做什么?任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

我会使用 willMove(toParent:) 在执行 segue 之前将标题改回。

override func willMove(toParent parent: UIViewController?) 
    navigationController?.navigationItem.largeTitleDisplayMode = .always
    navigationController?.navigationBar.prefersLargeTitles = true

【讨论】:

【参考方案2】:

在设置UINavigationController 时设置属性,然后再展示它。如果您已经展示了导航控制器,请尝试执行此操作以强制更新导航栏:

navigationController?.navigationItem.prompt = ""

navigationController?.navigationItem.prompt = nil

我从this question 那里得到了这个解决方法。

在您的特定情况下,最好将导航控制器子类化并在其viewDidLoad 方法中设置这些属性,因此它的属性(largeTitleDisplayModeprefersLargeTitles)在自包含代码中设置。

【讨论】:

以上是关于如何让导航栏在转回时显示大标题?的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的导航栏在滚动通过锚点时更改 CSS 类?

为啥我的底部导航栏在推送时变为空白?

2017-04-10js来控制导航栏在滚动条拉到一定位置时显示

如何让导航栏在一行上全屏显示以及设置百分比让其居中显示

如何使我的导航栏在滚动时变为半透明?

如何在导航栏后面显示图像?