(IOS13) Я пытаюсь реализовать функциональность, которая отображает панель навигации и строку состояния постепенно после прокрутки вниз страницы (со следующим кодом):
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
var offset = scrollView.contentOffset.y / 150
print(offset)
if offset > 1 { // show navigation bar
offset = 1
let color = UIColor.init(red: 1, green: 1, blue: 1, alpha: offset)
self.navigationController?.navigationBar.barStyle = .default
self.navigationController?.navigationBar.tintColor = UIColor(hue: 1, saturation: offset, brightness: 1, alpha: 1)
self.navigationController?.navigationBar.backgroundColor = color
navigationController?.setStatusBar(backgroundColor: color)
} else { // hide navigation bar
let color = UIColor.init(red: 1, green: 1, blue: 1, alpha: offset)
self.navigationController?.navigationBar.tintColor = UIColor(hue: 1, saturation: offset, brightness: 1, alpha: 1)
self.navigationController?.navigationBar.backgroundColor = color
navigationController?.setStatusBar(backgroundColor: color)
self.navigationController?.navigationBar.barStyle = .black
}
}
Панель навигации работает отлично. Однако строка состояния не меняется на прозрачный цвет, когда я возвращаюсь назад. [Снимки экрана ниже]
Начальное состояние
Немного прокрутки
Прокрутка назад к исходному состоянию
Я использовал этот кусок кода, чтобы обновить цвет строки состояния:
extension UINavigationController {
func setStatusBar(backgroundColor: UIColor) {
let statusBarFrame: CGRect
if #available(iOS 13.0, *) {
statusBarFrame = view.window?.windowScene?.statusBarManager?.statusBarFrame ?? CGRect.zero
} else {
statusBarFrame = UIApplication.shared.statusBarFrame
}
let statusBarView = UIView(frame: statusBarFrame)
statusBarView.backgroundColor = backgroundColor
view.addSubview(statusBarView)
}
}