Программно добавить представление за строкой состояния — swift

#ios #swift #statusbar

#iOS #swift #строка состояния

Вопрос:

У меня возникла проблема с отображением StatusBar в моем UITableViewController , потому что у него нет фона. Поэтому я хочу иметь возможность делать это программно. Я видел это в таких приложениях, как Facebook и Youtube. Кто-нибудь может мне с этим помочь?

Комментарии:

1. Проясните свой вопрос. Что вы хотите спросить?

2. Как программно добавить представление за строкой состояния?

3. Вы имеете в виду установить другой цвет для строки состояния и панели навигации. Пример: цвет панели навигации — серый, а цвет строки состояния — красный. Или хотите отображать панель навигации и строку состояния того же цвета, что и Facebook?

Ответ №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
}
  

Счастливого кодирования ..!!

Комментарии:

1. Это то, что я ищу, проблема, однако, заключается в том, что фон не сохраняет свое место за строкой состояния при прокрутке. Мне это нужно для этого 🙂

2. @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
    }
}
  

Комментарии:

1. это приведет к ошибке — невозможно добавить делегата на панель навигации