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

标签 ios swift uinavigationcontroller uinavigationbar ios11

我一直在尝试将 Apple Music 实现为推送 View Controller 的透明导航栏。网上有很多解决方案说把下面的代码放到viewDidLoad中:

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

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

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

最佳答案

我确认透明导航栏在 iOS 11 中不适用于推送的 View Controller ,而是显示为黑色,没有半透明的@screenshot。

enter image description here

首先,我已经提交了这个错误报告,最后 :) 我找到了一个快速的解决方法,即显示和关闭 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 是在没有 Storyboard或 xib 的情况下以编程方式生成的,因此它可以无缝运行:)很高兴我得到了预期的结果@screenshot

enter image description here

关于推送的 ViewController 中的 iOS 11 UINavigationBar 透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47596100/

相关文章:

ios - 如何用内容填充分组的动态表格 View 单元格(swift)

swift - 根据 tvOS 深色模式或浅色模式更改图像?

swift - Swift 中枚举的反射(reflect)

iphone - 背景中有 CATransition 白色闪光?

ios - 如何使用透明导航栏和工具栏正确地动画推送 View Controller ?

从 Obj-C 类继承的 Swift 中的 iOS 错误转换对象

ios - 如何从 tableView : cellForRowAtIndexPath: using `indexPath` argument? 中获取索引号

objective-c - 在 Objective C (iOS) 中拖放控件

ios - Parse PFObject.fetch 未更新为来自服务器的当前数据

iOS:为什么没有显示导航栏?