Я только что понял, как сделать это сам за UITabBarController
.Подход будет аналогичным для UINavigationController
.Я создал следующую функцию для включения / отключения жестов прокрутки:
/// Keeps references to the gestures created by the SideMenu manager.
private var sideMenuGestures : [UIGestureRecognizer] = []
/// Enables or disables the swipe gestures used to show a SideMenu on the given side (default: left).
func enableSideMenuGestures(_ enable: Bool, forMenu: UIRectEdge = .left) {
if enable {
if sideMenuGestures.count == 0 {
sideMenuGestures.append(SideMenuManager.default.menuAddPanGestureToPresent(toView: self.tabBarController!.view))
sideMenuGestures.append(contentsOf: SideMenuManager.default.menuAddScreenEdgePanGesturesToPresent(toView: self.tabBarController!.view, forMenu: forMenu))
}
} else {
self.tabBarController?.view.gestureRecognizers?.removeAll(where: { sideMenuGestures.contains($0) })
sideMenuGestures.removeAll()
}
}
В вашем случае просто замените self.tabBarController
на self.navigationController
, и оно должно работать так же.(Префикс self.
не требуется, но я хотел бы включить его в качестве соглашения, чтобы показать, что это унаследованное поле, а не то, которое я объявил.)
Это работает, потому что SideMenuManager
легко возвращает ссылки на всежесты, которые он создает;в противном случае вам придется очистить все жесты с контроллера навигации, что было бы плохой идеей , как объяснено в этом ответе .
Использование означает просто enableSideMenuGestures(true)
в обработчике действий для кнопки, которая отображает меню (например), и enableSideMenuGestures(false)
, если вы хотите снова отключить жесты.