如何让导航栏在转回时显示大标题?
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
方法中设置这些属性,因此它的属性(largeTitleDisplayMode
和prefersLargeTitles
)在自包含代码中设置。
【讨论】:
以上是关于如何让导航栏在转回时显示大标题?的主要内容,如果未能解决你的问题,请参考以下文章