如何在当前 vc 上获得 largeTitle,但在 vc 上获得小标题?

Posted

技术标签:

【中文标题】如何在当前 vc 上获得 largeTitle,但在 vc 上获得小标题?【英文标题】:how to get largeTitle on current vc, but small title on vc being pushed to? 【发布时间】:2019-07-19 08:35:50 【问题描述】:

我有一个简单的“更多”屏幕,我想要一个largeTitle。 我在一个静态表视图中有几个条目,它们通向其他视图控制器。 我想在“更多”屏幕中有大标题,而不是在推送到的屏幕中。 要么是所有大标题,要么都是小标题。我该怎么做? 我正在使用情节提要。

【问题讨论】:

【参考方案1】:

你有没有尝试设置

self.navigationController?.navigationBar.prefersLargeTitles = false

在您的第二个视图控制器中?

【讨论】:

不,我认为我可以在情节提要中完成所有大型标题行为... 我不认为这是可能的。 我在代码中尝试了你的建议。它将所有标题设置为小,因为它将它设置在 navigationController 上。这不是我想要的。我想在第一个 vc 上有一个大标题,在第二个 vc 上有一个小标题,就像在整个 ios 中一样。 尝试在您的普通视图控制器中设置它。 无论我在哪里设置,我在情节提要中可以做的都是一样的。如果我选择navigationController(截图,最左边的vc),我可以设置这个属性。在所有其他 vc 上,我无法设置此属性,因为只有一个 navigationController。【参考方案2】:

在详细的vc上设置如下:

self.navigationItem.largeTitleDisplayMode = .never

如果你访问navigationControllernavigationItem,它会改变所有detail vc,但是如果你访问detailVC的navigationItem,它只会改变navigationBar中的当前标题。

您无法在 Storyboard 中执行此操作,因为您无法在详细信息 vc 中单击 navigationBar 本身。

更多信息请访问WWDC video from 2017。

【讨论】:

【参考方案3】:

因为只有一个navigation controller 可以堆叠您的所有视图, 你可以试试写

self.navigationController?.navigationBar.prefersLargeTitles = false

在第二个viewController的viewWillApear方法中 在viewWillDisappear 上,您可以再次将其更改为

self.navigationController?.navigationBar.prefersLargeTitles = true

【讨论】:

有更好的方法吗?看起来这更像是一种 hack,而不是 Apple 的做法。 其实这不是hack,这也是用来在viewController被推时改变导航栏颜色,在它被弹出时改变它。如果您搜索更改推送的 viewControler 的导航栏颜色,您会发现这种做法。因为只有一个导航栈在堆叠所有视图

以上是关于如何在当前 vc 上获得 largeTitle,但在 vc 上获得小标题?的主要内容,如果未能解决你的问题,请参考以下文章

iOS11上的程序化beginRefreshing()在largeTitles模式下存在问题

请问如何获得中文字体的英文名?VC

在 iOS 11 LargeTitles 中将单行标题转换为多行标题时如何去除跳转效果

在 Swift 的外部方法中获取当前的 ViewController

使用 ToolbarItem(placement: .principal) re: largeTitle 的正确方法是啥?

vc6如何设置当前工程的编译方式,是win32 Debug还是win32 Release方式?