【问题标题】:Unwanted shadow on Navigation Bar when pushing view controllers推送视图控制器时导航栏上出现不需要的阴影
【发布时间】:2015-08-11 02:43:57
【问题描述】:

小问题:

如何在推送视图控制器时去除蓝色圆圈中的阴影?

长问题: 我的应用程序就像脸书。有 NewsFeed 视图、Detail post 视图和 Page 视图。这是我的界面生成器中的内容:

HomeViewController 是 NewsFeed 视图,DetailPostViewController 是详细页面视图,FirstViewController 是页面视图。 HomeViewController 嵌入到 UINavigationController,而 UINavigationController 嵌入到 UITabBarController。

当我从FirstViewController 推送到DetailPostViewController 时,这是完全正常的。 (注意我不使用segue推送,而是storyboard ID)

但是当我从DetailPostViewController 推到FirstViewController 时,导航栏上有一个奇怪的阴影,就像重叠一样。但我不想那样。 (不使用segue,而是故事板ID)

这是我推送到FirstViewController的代码

var vc = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! FirstViewController
self.navigationController?.pushViewController(vc, animated: true)

如何使从DetailPostViewController 到FirstViewController 的推送看起来正常?我尝试使用 segue,但它没有用。尝试了这么久,但仍然没有运气。谢谢。

【问题讨论】:

  • 我投了赞成票,希望也能在我的回答中得到它

标签: ios iphone swift cocoa-touch uinavigationcontroller


【解决方案1】:

我有同样的问题。在我的例子中,我使用inputAccessoryView 属性在 UIViewController 的底部显示我的自定义工具栏

事实证明,问题是因为我的视图控制器是动画开始时的第一响应者。

我觉得你应该试试navigationController?.setToolbarHidden(true, animated: true) 当您执行推送时。或者在推送动画之前找到另一种隐藏工具栏的方法。

对我来说,这段代码修复了问题,以防有人遇到类似问题

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    resignFirstResponder()
}

【讨论】:

    【解决方案2】:

    我认为你在这两种情况下都会得到阴影,如果你要使用内置的过渡,你无能为力。作为过渡的一部分,iOS 正在将其添加到视图层次结构中。

    您可以尝试使用自定义过渡:http://www.objc.io/issue-12/custom-container-view-controller-transitions.html。在这种情况下,我认为您可以完全控制过渡中涉及的视图。但是要消除这种阴影会做很多工作。

    【讨论】:

    • 谢谢。但是我只有一个实例(从帖子到页面)有阴影,但是从页面到帖子以及从新闻源到页面都是正常的。你认为我的界面构建器有什么令人头疼的错误吗?
    • 在您发布的所有图像中都有一个阴影......请往下看。我认为这只是顶部的对比度不同,所以它不那么明显。检查任何 iOS 应用程序 - 你会看到那个影子。这不是 IB 问题,而是 UIKit 的工作原理。
    • 非常感谢您的回复。我对视图控制器的阴影很好(第二张图片中的正常空白阴影)。但我不想要导航栏上的阴影(如第一张和第三张图片中的蓝色圆圈所标记)。点击搜索结果时,我在 Quora 应用程序中看到了同样的错误。但基本上所有的 iOS 应用都没有这个 bug,包括 Facebook、Twitter、堆栈溢出等。
    • 啊,抱歉没有正确阅读您的问题。不知道该建议什么。如果您在推送问题控制器之前重置导航堆栈,如果它仍然发生,我现在会感兴趣吗?也许那个控制器已经在堆栈上或者类似的奇怪东西?除此之外,我只能建议尝试在示例项目中隔离问题并在问题仍然存在时提交错误。
    • :(感谢您的建议。我会尝试重置它以查看它是否有效。无论如何谢谢!
    【解决方案3】:

    尝试使用导航控制器来推送

    let vc = TwoViewController(nibName: "TwoViewController", bundle: nil)
         navigationController?.pushViewController(vc, animated: true)
    

    查看本教程NavigationController

    【讨论】:

    • 谢谢。但我使用的是故事板而不是 xib。这和我的代码有什么区别?
    猜你喜欢
    • 1970-01-01
    • 2018-03-08
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多