Введение
Я создаю простое приложение, в которое RootViewController
встроено в UINavigationController
.У меня есть UIView
подкласс "landscapeView" с UICollectionView
, который заполняет представление.«landscapeView» скрыт в портретной ориентации и отображается в альбомной ориентации устройства.
выпуск
Когда устройство поворачивается в горизонтальную ориентацию, я скрываю панель навигации и табличное представление портрета «rootTableView», покапоказывая "landscapeView".Однако панель навигации появляется, когда я касаюсь экрана в альбомной ориентации.Я не могу понять, как отключить этот кран, чтобы показать вещь.(У меня `navigationController? .HidesBarsOnTap = false, его настройка по умолчанию в раскадровке).
Уточнение: скрытие панели навигации работает отлично в зависимости от ориентации устройства.
Вопрос
Как я могу предотвратить появление панели навигации при нажатии на экран в альбомной ориентации?
Код
viewWillTransition()
в "RootViewController""
private let landscapeView = LandscapeView(frame: .zero)
private let rootTableView = UITableView(frame: .zero, style: .grouped)
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
var isLandscape = true
switch UIDevice.current.orientation {
case .landscapeLeft:
navigationController?.navigationItem.searchController?.accessibilityElementsHidden = true
isLandscape = true
case .landscapeRight:
navigationController?.navigationItem.searchController?.accessibilityElementsHidden = true
isLandscape = true
case .portrait, .portraitUpsideDown, .faceUp, .faceDown, .unknown:
isLandscape = false
navigationController?.navigationItem.searchController?.accessibilityElementsHidden = false
default:
break
}
if isLandscape {
navigationController?.setNavigationBarHidden(true, animated: false)
self.landscapeView.isHidden = false
// This simply tells the "landscapeView" to layoutSubviews() and reloadData() for the collectionView within.
landscapeViewDelegate?.landscapeViewWillAppear(inDarkMode: inDarkMode)
}
UIView.animate(withDuration: 0.6, delay: 0, options: .layoutSubviews, animations: {
// This is a tableView displayed in portrait mode.
self.rootTableView.alpha = isLandscape ? 0 : 1
self.landscapeView.alpha = isLandscape ? 1 : 0
}) { (success) in
if isLandscape == false {
self.landscapeView.isHidden = true
self.navigationController?.setNavigationBarHidden(false, animated: true)
}
return
}
}
Спасибо за чтение.