Как боковое меню может покрывать часть строки состояния
У меня есть экран в моем приложении для iOS, в котором есть боковое меню, когда я смахиваю это боковое меню, я хочу, чтобы оно закрывало строку состояния (но я не хочу, чтобы строка состояния была полностью скрыта), я просто представляю, какая часть перекрывается с боковое меню, чтобы попасть под боковое меню, а не перед ним, кто-нибудь может мне помочь? (Я использую Swift 4.2 в моем приложении) (это боковое меню - просто еще один ViewController, который я анимирую внутри и из моего MainViewController)
1 ответ
Возможный способ показать боковое меню над строкой состояния - использовать UIWindow с wndowLevel = .statusBar
это представит меню состояния UIViewController. Вот быстрая реализация, которую я сделал:
func presentSideMenu() {
let vc = UIViewController() // side menu controller
vc.view.backgroundColor = .red
window = UIWindow()
window?.frame = CGRect(x: -view.bounds.width, y: 0, width: view.bounds.width, height: view.bounds.height)
window?.rootViewController = vc
window?.windowLevel = .statusBar
window?.makeKeyAndVisible()
window?.isHidden = false
window?.addSubview(vc.view)
}
Затем вы можете добавить распознаватель панорамирования к вашему виду и соответственно изменить фрейм окна UIWindow. Опять простой фрагмент:
func hideSideMenu() {
window?.isHidden = true
window = nil
}
@objc func pan(recognizer: UIPanGestureRecognizer) {
if recognizer.state == .began {
presentSideMenu()
} else if recognizer.state == .changed {
let location = recognizer.location(in: view)
window?.frame = CGRect(x: -view.frame.width + location.x, y: 0, width: view.frame.width, height: view.frame.height)
} else if recognizer.state == .ended {
hideSideMenu()
}
}
Обратите внимание, что вы должны иметь строгую ссылку на окно UIWindow, в противном случае оно будет выпущено немедленно. Может быть, вы должны рассмотреть вопрос о том, является ли представление через строку состояния хорошей идеей. Надеюсь это поможет.