【问题标题】:Hide navigation bar but also keep background color of status bar隐藏导航栏但保持状态栏的背景颜色
【发布时间】:2016-08-29 14:33:14
【问题描述】:

我正在使用默认的 ios 方法隐藏我的导航栏

self.navigationController?.hidesBarsOnSwipe = true

我的导航栏上有一个自定义的绿色,半透明设置为 true。但是,当导航栏隐藏时,包括状态栏后面的颜色在内的整个自定义绿色都会隐藏,如下图所示。即使导航栏被隐藏,我也想保持状态栏后面的颜色相同(使用相同的半透明导航栏),以便表格的内容不会与状态栏重叠。

我尝试使用以下功能手动设置状态栏颜色。但这不起作用,因为我的导航栏是半透明的,这似乎只是一个补丁修复,因为导航栏不再是半透明的。在转换 VC 时,隐藏/添加背景到状态栏有时会导致糟糕的用户体验

    func setStatusBarBackgroundColor(color: UIColor) {
    guard  let statusBar = UIApplication.sharedApplication().valueForKey("statusBarWindow")?.valueForKey("statusBar") as? UIView else {
        return
    }
    statusBar.backgroundColor = color
}

【问题讨论】:

  • 尝试在状态栏位置添加一个高度为 20px 的 uiview,并在应用窗口中添加所需的背景颜色。
  • 它可以工作 98%。这里有点挑剔,如果我这样做并仔细观察,当“半透明”导航栏隐藏并传递我为状态栏创建的 UIView 时,我会看到导航栏由于其透明度而越过 UIview。否则效果很好

标签: ios objective-c swift navigationbar


【解决方案1】:

你可以通过应用渐变层来实现。这里是代码,请看一下。

let colorTop =  UIColor.redColor().CGColor //your status bar color
   let colorBottom = UIColor.whiteColor().CGColor//color for your navigation bar
    let gradientLayer = CAGradientLayer()

     gradientLayer.colors = [ colorTop, colorBottom]
     gradientLayer.locations = [ 0.5, 0.5]
     gradientLayer.frame = CGRectMake(0, -20, 375, 64)

      self.navigationController?.navigationBar.layer.addSublayer(gradientLayer)

【讨论】:

    猜你喜欢
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多