推送的 ViewController 中的 iOS 11 UINavigationBar 透明度

Posted

技术标签:

【中文标题】推送的 ViewController 中的 iOS 11 UINavigationBar 透明度【英文标题】:iOS 11 UINavigationBar Transparency in pushed ViewController 【发布时间】:2017-12-01 15:01:16 【问题描述】:

我一直在尝试实现 Apple Music,例如用于推送视图控制器的透明导航栏。网上有很多解决方案都说把下面的代码放到viewDidLoad中:

navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationController?.navigationBar.shadowImage =  UIImage()

但问题是它只适用于根控制器,例如带有项目列表的 UITableViewController。当我点击一个项目并打开它的详细信息时,我希望看到透明的导航栏,但在出现后它会变成实心的(甚至不是半透明的)。即使设置 barTintColor 也无济于事。

我做错了什么?还是 ios 11 中的一个已知问题?它曾经工作过......

【问题讨论】:

【参考方案1】:

我确认透明导航栏在 iOS 11 中不适用于推送的视图控制器,而是在没有半透明 @screenshot 的情况下显示为黑色。

首先,我提交了这个错误报告,最后 :) 我找到了一个快速的解决方法,即呈现和关闭 UIViewcontroller 可以解决此问题,如下所示:

if (self.navigationController!.viewControllers.count > 1) 
    if #available(iOS 11.0, *) 
        self.present(UIViewController(), animated: true, completion: 
            self.dismiss(animated: false)
        )
        self.scrollView.contentInsetAdjustmentBehavior = .never
     else 
        self.automaticallyAdjustsScrollViewInsets = false
    
    self.extendedLayoutIncludesOpaqueBars = false

我在viewWillAppear 中使用上面的代码,并且我的 UI 是在没有情节提要或 xib 的情况下以编程方式生成的,因此它可以无缝运行 :) 很高兴我得到了预期的结果@screenshot

【讨论】:

在我的情况下似乎不起作用,但感谢您的时间。苹果仍然必须对此进行修复。我想知道他们是如何在 Apple Music 应用中保留这种行为的。它是用最新的 sdk 构建的(就我们看到的大标题而言),所以他们应该面临同样的问题。 @SergeyPetrachkov 我的问题出在这一行,'parentViewController.navigationController.navigationBar.isTranslucent = false',请确保父视图控制器上没有 isTranslucent = false

以上是关于推送的 ViewController 中的 iOS 11 UINavigationBar 透明度的主要内容,如果未能解决你的问题,请参考以下文章

iOS 导航问题:推送 ViewController 后,会导致导航栏显示上一个 ViewController 的导航项

ios:在模型视图上推送另一个 ViewController

iOS推送ViewController不起作用

iOS:通过委托方法从推送的 ViewController 返回?

iOS Swift 从推送通知以编程方式导航到某些 ViewController

推送通知 - 使用 SceneDelegate 在通知点击时推送 ViewController