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

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

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

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

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

【问题讨论】:

    标签: ios swift uinavigationcontroller uinavigationbar ios11


    【解决方案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
    猜你喜欢
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多