ios - Swift:在视图中点击时会出现隐藏的导航栏
问题描述
介绍
我正在创建一个简单的应用程序,其中RootViewController
嵌入了UINavigationController
. 我有一个UIView
子类“landscapeView”,其中有一个UICollectionView
填充视图。“landscapeView”以纵向隐藏并以横向设备方向显示。
问题
当设备旋转到横向时,我隐藏了导航栏和纵向表视图“rootTableView”,同时显示“landscapeView”。但是,当我以横向方式点击屏幕时,会出现导航栏。我不知道如何禁用此点击以显示内容。(我有`navigationController?.hidesBarsOnTap = false,它在情节提要中设置为默认值)。
澄清:隐藏导航栏完全取决于设备方向。
问题
横向点击屏幕时,如何防止出现导航栏?
代码
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 } }
谢谢阅读。
解决方案
问题是您Hide Bars When Vertically Compact
在情节提要中检查了导航控制器。这个属性带来了点击行为:
当此属性的值为 true 时,导航控制器在转换到垂直紧凑环境时隐藏其导航栏和工具栏。返回垂直规则环境后,导航控制器会自动再次显示两个条形图。此外,内容区域中未处理的点击会导致导航控制器再次显示两个栏。此属性的默认值为 false。
您可以取消选中该属性,因为您自己负责在viewWillTransition
方法中显示和隐藏导航栏。
推荐阅读
- javascript - Coldfusion 发送电子邮件
- windows - BATCH 中的 FINDSTR /E 匹配行尾的字符串的正确语法是什么?
- php - 当我以“多对一”关系运行“工匠:迁移”时出现问题
- python - 取消嵌套列表函数
- python-3.x - python3中的concurrent.futures.process.BrokenProcessPool
- javascript - 如何在对象数组中减去具有相似键的对象值?(不要与删除重复项混淆)
- git - 尝试使用 powershell 下载 git repo 时出现“(406)不可接受”
- c++ - linux命令查看/列出上次对文件所做的更改
- php - 试图获取非对象的属性'user_name':在单页中获取单行的数据
- java - 如何在 Android 中使用我所在地区的回历日期?