【发布时间】:2019-05-25 11:07:19
【问题描述】:
简介
我正在创建一个简单的应用程序,其中 RootViewController 嵌入在 UINavigationController 中。我有一个 UIView 子类“landscapeView”,其中有一个 UICollectionView 填充视图。 “landscapeView”以纵向隐藏并以横向设备方向显示。
问题
当设备旋转到横向时,我隐藏了导航栏和纵向表视图“rootTableView”,同时显示“landscapeView”。但是,当我以横向方式点击屏幕时,会出现导航栏。我不知道如何禁用此点击以显示内容。 (我有 `navigationController?.hidesBarsOnTap = false,它在情节提要中设置为默认值)。
澄清:隐藏导航栏完全取决于设备方向。
问题
如何防止在横向点击屏幕时出现导航栏?
代码
-
“RootViewController”中的
viewWillTransition()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 } }
感谢阅读。
【问题讨论】:
-
试试这个!! lanscapeView.isUserInteractionEnabled = false
-
@AbhishekJadhav 感谢您的评论。这将删除“landscapeView”中
UICollectionView的手势,但是当我点击 LandscapeView 时,navigationController 仍然出现。 -
现在要隐藏导航栏吗?
-
@AbhishekJadhav 是的,我想在设备处于横向时隐藏导航栏,效果很好。但是,如果我在横向时点击屏幕,则会出现导航栏。
-
检查断点可能是你改变导航栏隐藏的标志为假吗?或者当您点击屏幕时您的 isLandscape 标志会发生变化?
标签: ios swift uiview uiviewcontroller uinavigationcontroller