【问题标题】:Programatically add view behind status bar - swift以编程方式在状态栏后面添加视图 - swift
【发布时间】:2016-10-05 11:19:38
【问题描述】:

我在UITableViewController 中显示StatusBar 时遇到问题,因为它没有背景。所以我希望能够以编程方式做到这一点。我在 Facebook 和 Youtube 等应用程序中看到了这一点。谁能帮我解决这个问题?

【问题讨论】:

  • 明确您的问题。你想问什么?
  • 如何以编程方式在状态栏后面添加视图?
  • 你的意思是为状态栏和导航栏设置不同的颜色。例如:导航栏颜色为灰色,状态栏颜色为红色。还是想像 Facebook 一样将导航栏和状态栏显示为相同颜色?

标签: ios swift statusbar


【解决方案1】:

为了在状态栏后面添加一个视图,您可以使用下面为 Swift 3

编写的代码

你需要为它创建一个扩展,你可以在任何需要它的视图控制器中使用它。

let SCREEN_WIDTH = UIScreen.main.bounds.size.width

extension UIViewController {
    func addStatusBarBackgroundView(viewController: UIViewController) -> Void {
        let rect = CGRect(origin: CGPoint(x: 0, y: 0), size:CGSize(width: SCREEN_WIDTH, height:20))
        let view : UIView = UIView.init(frame: rect)
        view.backgroundColor = UIColor.init(red: 255/255, green: 255/255, blue: 255/255, alpha: 1) //Replace value with your required background color
        viewController.view?.addSubview(view)
    }
}

只需在视图控制器中写一行即可调用它:

override func viewDidLoad() {
    super.viewDidLoad()
    addStatusBarBackgroundView(viewController: self)
    //Your extra code
}

编码愉快..!!

【讨论】:

  • 这就是我要找的东西,但问题是滚动时背景不会保持在状态栏后面。我需要它来做到这一点:-)
  • @FeReTu 请发布代码以准确理解问题。另外,您是否将具有子类的视图控制器类分配为滚动视图?
【解决方案2】:

为了让你的 UINavigationBar 在你的状态栏后面伸展,你可以在导航栏的委托上实现函数 position(for:)。

Swift3 示例

class MyViewController: UIViewController {
    
    @IBOutlet weak var navigationBar: UINavigationBar!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        navigationBar.delegate = self
    }
}

extension MyViewController: UINavigationBarDelegate {
    func position(for bar: UIBarPositioning) -> UIBarPosition {
        return .topAttached
    }
}

【讨论】:

  • 它会产生错误 - 无法将委托添加到导航栏
猜你喜欢
  • 2020-05-01
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
相关资源
最近更新 更多