Ios Swift:在视图中点击时显示隐藏的导航栏 介绍
我正在中创建一个简单的应用程序,其中Ios Swift:在视图中点击时显示隐藏的导航栏 介绍,ios,swift,uiview,uiviewcontroller,uinavigationcontroller,Ios,Swift,Uiview,Uiviewcontroller,Uinavigationcontroller,我正在中创建一个简单的应用程序,其中RootViewController嵌入在UINavigationController中。我有一个UIView子类“landscapeView”,其中有一个UICollectionView填充视图。“景观视图”隐藏在纵向中,并以横向设备方向显示 问题 当设备旋转到横向时,我隐藏导航栏和纵向表格视图“rootTableView”,同时显示“landscapeView”。但是,当我以横向方向轻触屏幕时,导航栏会出现。我想不出如何禁用这个水龙头来显示东西。(我有'n
RootViewController
嵌入在UINavigationController
中。我有一个UIView
子类“landscapeView”,其中有一个UICollectionView
填充视图。“景观视图”隐藏在纵向中,并以横向设备方向显示
问题
当设备旋转到横向时,我隐藏导航栏和纵向表格视图“rootTableView”,同时显示“landscapeView”。但是,当我以横向方向轻触屏幕时,导航栏会出现。我想不出如何禁用这个水龙头来显示东西。(我有'navigationController?.hidesBarsOnTap=false,其设置在情节提要中为默认设置)
说明:隐藏导航栏的效果取决于设备的方向
问题:
当屏幕以横向方向点击时,如何防止导航栏出现
代码
viewWillTransition()
感谢阅读。问题是您在序列图像板中为导航控制器选中了垂直压缩时隐藏栏。此属性带来了该点击行为: 当此属性的值为true时,导航控制器 当它转换到某个位置时隐藏其导航栏和工具栏 垂直紧凑的环境。当返回到垂直规则时 环境中,导航控制器会自动显示两个栏 再一次。此外,内容区域中未经处理的点击会导致 导航控制器再次显示两个栏。的默认值 这个属性是假的
您可以取消选中该属性,因为您自己负责在
viewWillTransition
方法中显示和隐藏导航栏。试试这个!!lanscapeView.isUserInteractionEnabled=false@AbhishekJadhav谢谢你的评论。这将删除“landscapeView”中的UICollectionView
的手势,但是当我点击landscapeView时,navigationController仍会出现。现在你想隐藏导航栏吗?@AbhishekJadhav是的,当设备处于横向时,我想隐藏导航栏,这非常有效。但是,如果我在横向方向点击屏幕,导航栏就会出现。用断点检查是否更改导航栏隐藏的标志为false?或者当你点击屏幕时,你的isLandscape标志改变了?谢谢你的回答。但是,它没有解决“点击时显示”问题,导航栏仍会在点击时显示。hidesBarsOnTap
不会阻止导航栏在点击时出现,它似乎只会影响导航栏的取消。这对你有用吗?我创建了一个简单的演示项目,并将其上传到GitHub,这说明了这个问题。请查看我问题中的编辑链接。@theoadahl更新了我的答案。很高兴我能提供帮助。
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
}
}