【问题标题】:How to Share a View Across a Navigation Hierarchy with No Animation?如何在没有动画的情况下跨导航层次共享视图?
【发布时间】:2016-10-06 20:14:44
【问题描述】:

我有一个简单的导航视图层次结构,其中有 2 个视图。我想要一个自定义导航栏,所以我隐藏了默认导航栏,并且我实现了一个容器视图,它在导航层次结构中的 2 个视图之间共享。

一切都按我的意愿进行,除非我转到较低或较高的视图时,顶部栏会滑开并重新出现在新视图上。当我推送或弹出层次结构中的其他视图时,我希望它看起来是静止的。

有没有简单的方法来做到这一点?或者我应该删除我的自定义共享容器视图并尝试使用导航栏(我目前“隐藏”)使其工作?

【问题讨论】:

  • 似乎做我想做的最好的方法就是硬着头皮学习如何自定义默认导航控制器(更改它的高度,并添加自定义按钮)。然而,现在我将尝试使用多个重叠的容器视图来完成我的应用程序,我可以在屏幕上和屏幕外滑动,因为只要这不会导致一些无法预料的新问题,这是一种我已经非常熟悉的方法会得到我想要的样子。

标签: ios swift xcode uinavigationcontroller uiviewanimation


【解决方案1】:

我不得不为客户做一次。正如您所说,我们这样做的方式是制作一个包含容器视图的包含视图控制器。在这个容器视图中,我们嵌入了一个UINavigationController,并将手动弹出并将UIViewControllers 推送到它的导航堆栈。当然你想隐藏UINavigationController的导航栏。

听起来您似乎实现了这一点,但您只是在自定义导航控制器中嵌入了一个普通的旧视图控制器,然后转到另一个也嵌入在自定义视图控制器中的视图控制器?理想情况下,您需要一个带有嵌入式UINavigationController 的自定义导航控制器实例。我相信您必须以编程方式完成所有视图控制器转换。

意见:我个人建议反对这样做。我相信一个应用程序应该感觉像是它所在操作系统的扩展。用户应该觉得它是他们手机的一部分。使用本机导航栏还可以减少用户理解您的应用所需的工作量。

我知道您在想“但它只是一个导航栏”,但我们谈论的是如果加载时间超过 2.5 秒,可能会卸载应用程序的同一个人。

【讨论】:

  • 我在 2 个 VC 之间有一个正常的 UINavigationController 设置。每个 VC 都包含一个相同大小的嵌入式容器视图,它通过嵌入式 segue 链接到同一个 VC。我走这条路,因为我不知道如何自定义大小并将按钮添加到默认导航栏,到目前为止它完全按照我的意愿工作,除了我不希望它在上下移动时重新激活导航堆栈。就美学而言,我的容器视图“准导航栏”和原生导航栏之间的唯一区别是它的高度稍微小了一点。
  • 隐藏导航栏的代码在哪里? @PlateReverb
  • 在两个视图控制器类中
【解决方案2】:

我想要一个自定义的导航栏,所以我隐藏了默认的导航栏

那是你的错误。在 UINavigationController 界面中获取自定义导航栏的方法是使用init(navigationBarClass:toolbarClass:) 对其进行初始化。现在内置导航控制器正在使用 your 导航栏!从那以后,一切都会好起来的。

https://developer.apple.com/reference/uikit/uinavigationcontroller/1621866-init

【讨论】:

  • 我的“自定义导航栏”实际上只是视图控制器中的一个单独视图,它通过层的 VC 上单独的嵌入式容器视图在导航堆栈的不同视图之间共享。
  • 这个初始化应该放在哪里?是否可以将具有嵌入式 segue 连接的容器视图或视图控制器初始化为导航栏?还是我必须以其他方式创建自定义导航栏?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多