【问题标题】:How do I set the status bar in iOS to show a message?如何在 iOS 中设置状态栏以显示消息?
【发布时间】:2018-09-20 04:55:16
【问题描述】:

我希望在状态栏下方设置一条消息,并可能更改消息的颜色(见图 - 我希望在“睡眠周期”所在的位置设置一条消息)。

但是,我查看了 iOS 的 Human Design Guidelines,但无法确定该控件的名称。

https://developer.apple.com/ios/human-interface-guidelines/ui-bars/navigation-bars/

只要指向正确的方向就会有很大的帮助。

【问题讨论】:

  • 和this类似吗?
  • Nope :) 此“状态栏消息”存在于应用程序之外。这似乎是应用内的。
  • 你不能在你的应用程序之外这样做,除非你使用一些后台服务,比如录音。这也是系统显示的,你无法控制它
  • @sandeep 我上面显示的示例是设置我的应用睡眠周期。该栏存在于应用程序之外。是的,它会在后台跟踪您的动作。
  • @joe 感谢乔的详细回答。我认为这在应用程序之外不起作用。

标签: ios swift


【解决方案1】:

试试这个代码:在 Xcode 8 中测试的代码。

/使用以下代码更新您的 plist

 View controller-based status bar appearance = NO  

//在你的VC中:

     override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    title = "Some Title"

    navigationController?.navigationBar.tintColor = UIColor.white
    navigationController?.navigationBar.barTintColor = UIColor.red
    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]
    UIApplication.shared.statusBarStyle = .lightContent  // To change your status bar to display light content (In white colour)
   }

    func sleepCycleNotify() {

    // To set BannerView
    let barView = UIView(frame: CGRect(x:0, y:0, width:view.frame.width, height:(UINavigationController().navigationBar.frame.height)))
    barView.backgroundColor=UIColor.red // set to any colour you want..
    navigationController?.navigationBar.addSubview(barView)

    let notifyLabel = UILabel()
    notifyLabel.frame = CGRect(x:0, y:0, width:view.frame.width, height:(UINavigationController().navigationBar.frame.height))
    notifyLabel.backgroundColor=UIColor.clear
    notifyLabel.text = "Sleep Cycle"
    notifyLabel.textAlignment = .center
    notifyLabel.textColor = UIColor.white
    notifyLabel.alpha = 0.8
    barView.addSubview(notifyLabel)


    // Animation 1:
    // To achive animation
    barView.center.y -= (navigationController?.navigationBar.bounds.height)!


    UIView.animate(withDuration: 0.7, delay: 0, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.6, options: UIViewAnimationOptions.curveEaseIn, animations:{
        barView.center.y += (self.navigationController?.navigationBar.frame.height)!


        }, completion:{ finished in



            UIView.animate(withDuration: 1, delay: 1.5, usingSpringWithDamping: 0.6, initialSpringVelocity: 0.9, options: UIViewAnimationOptions.curveEaseOut, animations:{

                barView.center.y -= ((self.navigationController?.navigationBar.frame.height)! + UIApplication.shared.statusBarFrame.height)

                }, completion: nil)

    })


}

以上代码的输出:

//动画2:

    func sleepCycleNotify() {

    // 
    let barView = UIView(frame: CGRect(x:0, y:0, width:view.frame.width, height:(UINavigationController().navigationBar.frame.height)))
    barView.backgroundColor=UIColor.red // set any colour you want..
    navigationController?.navigationBar.addSubview(barView)

    let notifyLabel = UILabel()
    notifyLabel.frame = CGRect(x:0, y:0, width:view.frame.width, height:(UINavigationController().navigationBar.frame.height))
    notifyLabel.backgroundColor=UIColor.clear
    notifyLabel.text = "Sleep Cycle"
    notifyLabel.textAlignment = .center
    notifyLabel.textColor = UIColor.white
    notifyLabel.alpha = 0.8
    barView.addSubview(notifyLabel)



    // To achive animation
    barView.center.y -= (navigationController?.navigationBar.bounds.height)!


    UIView.animate(withDuration: 1, delay: 0, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.6, options: UIViewAnimationOptions.curveEaseIn, animations:{

        UIApplication.shared.isStatusBarHidden = true
        UINavigationController().navigationBar.isHidden = true
        barView.center.y += (self.navigationController?.navigationBar.frame.height)!




        }, completion:{ finished in



            UIView.animate(withDuration: 1.5, delay: 0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0.9, options: UIViewAnimationOptions.curveEaseOut, animations:{
               // notifyLabel.alpha = 0...1
                UIApplication.shared.isStatusBarHidden = false
                UINavigationController().navigationBar.isHidden = false
                barView.center.y -= ((self.navigationController?.navigationBar.frame.height)! + UIApplication.shared.statusBarFrame.height)


                }, completion: nil)

    })


}

动画 2 的输出:

改进的答案:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    title = "Some Title"

    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]
    navigationController?.navigationBar.barTintColor = UIColor.purple
    UIApplication.shared.statusBarStyle = .lightContent

  }

    func sleepCycleNotify() {

    // To set BannerView
    let barView = UIView(frame: CGRect(x:0, y:-UIApplication.shared.statusBarFrame.height, width:view.frame.width, height:(UINavigationController().navigationBar.frame.height) + UIApplication.shared.statusBarFrame.height ))
    barView.backgroundColor=UIColor.red // set to any colour you want..
    navigationController?.navigationBar.addSubview(barView)


    let notifyLabel = UILabel()
    notifyLabel.frame = CGRect(x:0, y:UIApplication.shared.statusBarFrame.height, width:view.frame.width, height:(UINavigationController().navigationBar.frame.height))
    notifyLabel.backgroundColor=UIColor.clear
    notifyLabel.numberOfLines = 0
    notifyLabel.text = "Sleep Cycle"
    notifyLabel.textAlignment = .center
    notifyLabel.textColor = UIColor.white
    notifyLabel.alpha = 0.8
    barView.addSubview(notifyLabel)


    // Animation 1:
    // To achive animation
    barView.center.y -= (navigationController?.navigationBar.bounds.height)!


    UIView.animate(withDuration: 0.7, delay: 0, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.6, options: UIViewAnimationOptions.curveEaseIn, animations:{
        barView.center.y += (self.navigationController?.navigationBar.frame.height)!



        }, completion:{ finished in



            UIView.animate(withDuration: 1, delay: 1.5, usingSpringWithDamping: 0.6, initialSpringVelocity: 0.9, options: UIViewAnimationOptions.curveEaseOut, animations:{

                barView.center.y -= ((self.navigationController?.navigationBar.frame.height)! + UIApplication.shared.statusBarFrame.height)

                }, completion: nil)

    })   
}

动画 3 的输出:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    相关资源
    最近更新 更多