如何在标签栏而不是导航栏上显示视图?

Posted

技术标签:

【中文标题】如何在标签栏而不是导航栏上显示视图?【英文标题】:How do I show a view over the tab bar but not over the navigation bar? 【发布时间】:2015-01-02 05:28:03 【问题描述】:

我想展示一个在UITabBar 上显示但不在UINavigationBar 上显示的模式视图。

据我了解,将视图覆盖在所有内容之上的最佳方法是将其放置在自己的 UIWindow 中。这很好用,如果我使窗口中视图的 y 原点低于导航栏,它就可以完美地工作。

然而,让它低于 y 原点真的很难。我可以使用topLayoutGuide.length 属性来定位y,但是当我旋转时,随着导航栏高度的变化,这不再是真的。

我该怎么做?

【问题讨论】:

如果您不想添加叠加层,那么您可以使用导航控制器展示您的视图控制器。所以导航栏不会隐藏。 @ChintaN-Maddy-Ramani 这是一个简单的视图,我对添加这种复杂程度不感兴趣。 【参考方案1】:

我最近不得不处理类似的事情,最终以模态方式呈现一个新视图,您将希望调用导航控制器,然后将其 setDefinesPresentationContext: 设置为 Yes

setDefinesPresentationContext: 是必需的,以便呈现视图控制器将呈现视图的边界限制在呈现视图的可见区域。结果,视图控制器保持在当前可见窗口的范围内(默认为否,在这种情况下,呈现的视图不断要求通过 VC 层次结构向上定义上下文,直到它到达声明此角色的 VC,或直到它碰到 UIWindow)。

使用此方法,您不必计算视图的边界,它会自动完成。不过,请查看有关此方法的 Apple 文档以获取完整说明。


(和无耻的插件,我在my blog 上写过它。它在“呈现搜索栏”下。请原谅格式,仍在进行中)

【讨论】:

以上是关于如何在标签栏而不是导航栏上显示视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置导航栏的后退项

在 iOS 7 中更新导航栏而不更改视图

如何在情节提要的标签栏上启动导航控制器的第三个视图控制器

当用户改变设备方向时,如何只旋转导航栏而不旋转视图?

使用swift在选项卡式视图中的导航栏上添加按钮

如何在每个应用程序视图的导航栏上添加带有动态内容的标签?