推出视图控制器时导航栏上出现不必要的阴影

5

简短问题: 如何在推送视图控制器时删除蓝色圆圈中的阴影?

长问题: 我的应用程序类似于Facebook。有一个NewsFeed视图、详细帖子视图和页面视图。这是我在界面构建器中的内容:interface builder

HomeViewController是NewsFeed视图,DetailPostViewController是详细页面视图,而FirstViewController是页面视图。 HomeViewController嵌入到了UINavigationController中,后者又嵌入到UITabBarController中。

当我从FirstViewController跳转到DetailPostViewController时,一切都很正常。(请注意,我不使用segue来推送,但用了storyboard ID) enter image description here

但是当我从DetailPostViewController跳转到FirstViewController时,导航栏上会有奇怪的阴影,看起来会重叠。但我不想要那个。(没有使用segue,但用了storyboard ID) enter image description here

这是我推到FirstViewController的代码:

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

我该如何使从DetailPostViewControllerFirstViewController的跳转看起来正常?我尝试使用segue但它没有起作用。已经尝试了很长时间,但仍然没有运气。谢谢。


我已经为你点赞了,希望你也能在我的回答中点赞。 - Nischal Hada
4个回答

2
我遇到了同样的问题。在我的情况下,我使用了inputAccessoryView属性来显示在UIViewController底部的自定义工具栏。
结果发现,问题是因为我的视图控制器在动画开始时是第一响应者。
我认为在执行推送时,你应该尝试navigationController?.setToolbarHidden(true, animated: true)或找到其他方法在推送动画之前隐藏工具栏。
对于我来说,这段代码解决了问题,如果有人遇到类似的问题,可以参考一下。
override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    resignFirstResponder()
}

0

我认为你在两个实例中都得到了阴影,如果你要使用内置的过渡效果,那么你无法对此进行任何操作。iOS会将其作为过渡的一部分添加到视图层次结构中。

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


谢谢。但是我只在一个实例上有阴影(从帖子到页面),但从页面到帖子和新闻源到页面都是正常的。你认为我的界面构建器中是否有任何令人头痛的错误吗? - Henry Ngan
在你发布的所有图片中,都有一个阴影...往页面下方看。我认为只是顶部那个图片的对比度不同,所以不太显眼。检查任何iOS应用程序-你会看到那个阴影。这不是Interface Builder的问题,而是UIKit的工作原理。 - Remover
非常感谢您的回复。我对视图控制器的阴影感到满意(第二张图片中的普通白色空间阴影)。但是我不希望导航栏上有阴影(如第一张和第三张图片中蓝色圆圈所示)。当点击搜索结果时,我在Quora应用程序中看到了相同的错误。但基本上所有iOS应用程序都没有这个错误,包括Facebook、Twitter、Stack Overflow等。 - Henry Ngan
1
啊,抱歉我没有仔细阅读你的问题。不确定该提出什么建议。如果在推送问题控制器之前重置导航堆栈,是否仍然会发生这种情况?也许该控制器已经在堆栈中或者类似奇怪的情况?除此之外,我只能建议尝试在示例项目中隔离问题,并在问题持续存在时提交错误报告。 - Remover
谢谢你的建议。我会尝试重置它看看是否有效。无论如何还是谢谢! - Henry Ngan
兄弟,你怎么解决这个问题啊?能不能给我讲解一下?我一直受这个问题的困扰,请帮帮我,谢谢。 - Hitesh Surani

0
    if #available(iOS 13.0, *) {
        let appearance = UINavigationBarAppearance()
        appearance.backgroundColor = .AppWhiteColor
        appearance.titleTextAttributes = [.foregroundColor: UIColor.white]
        appearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white]
        
        appearance.titleTextAttributes = [NSAttributedString.Key.font: UIFont.MontBold(17), NSAttributedString.Key.foregroundColor:UIColor.AppBlackColor]

        navigationController?.navigationBar.tintColor = .white
        navigationController?.navigationBar.standardAppearance = appearance
        navigationController?.navigationBar.compactAppearance = appearance
        navigationController?.navigationBar.scrollEdgeAppearance = appearance
    } else {
        // Fallback on earlier versions
    }

请尝试以下代码来改变导航栏的颜色:

-1

尝试使用这个来通过导航控制器进行推送

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

请查看这个教程导航控制器


1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Henry Ngan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接