ios - UINavigationControllerPaletteClippingView 覆盖 UIImageView 并接收点击手势
问题描述
我正在点击图像视图以放大它,然后点击以关闭放大的图像。关闭水龙头不起作用。当我查看视图层次结构时,我发现在我认为正在接收点击的图像视图上有一个 UINavigationControllerPaletteClippingView。他们在 iOS 11 中提到了一个类似的问题。我几乎找不到任何关于此的文档,我有点迷路了。这是我的代码:
@objc func enlargeImage(sender: UITapGestureRecognizer) {
let image = (sender.view as! UIImageView).image
let enlargedImageView = UIImageView(image: image)
enlargedImageView.frame = view.frame
enlargedImageView.backgroundColor = .black
enlargedImageView.contentMode = .scaleAspectFit
enlargedImageView.isUserInteractionEnabled = true
let tapToDismiss = UIGestureRecognizer(target: self, action: #selector(dismissEnlargedImage))
enlargedImageView.addGestureRecognizer(tapToDismiss)
self.view.addSubview(enlargedImageView)
self.navigationController?.isNavigationBarHidden = true
}
@objc func dismissEnlargedImage(sender: UITapGestureRecognizer) {
self.navigationController?.isNavigationBarHidden = false
sender.view?.removeFromSuperview()
}
任何帮助表示赞赏!
更新:
这是视图调试器屏幕截图。
我在dismissEnlargedImage 中放置了一个断点,但它从未到达过,所以我认为没有这样的问题。而且我在单独的函数中声明了两个手势识别器,所以我看不到范围成为问题的方法。
解决方案
_UINavigationControllerPaletteClippingView
在 iOS 11 中引入,简而言之,处理通过其searchController
属性添加到导航项的导航栏中搜索栏的外观。它与 iOS 11 中引入的大标题和折叠栏结合使用。
你会发现关于这个类的文档很少,因为它是 UIKit 私有的(即,如果你想保持 AppStore 的一致性,你不应该直接使用它)。
话虽如此,如果没有更多上下文,可能很难分析您的问题。您能否提供一个布局调试器的屏幕截图,您可以在其中看到_UINavigationControllerPaletteClippingView
您正在添加的图像视图的覆盖范围?
是否在可搜索屏幕中添加了图像视图。即当您显示图像时,导航场景是否包含搜索栏?
如果其他上下文为我(我们)提供了在哪里寻找问题的线索,我会很高兴地更新这个答案。
更新
enlargeImage
似乎是由 a 调用的UITapGestureRecognizer
。您能否确认这两种方法的调用方式和顺序等不涉及任何猴子业务?
我的意思是:
- Maybe与您
enlargeImage
同时显示和隐藏图像的每个点击同时调用dismissEnlargedImage
,给您的印象是关闭点击不起作用? - 也许手势识别器调用
enlargeImage
与手势识别器调用相关,dismissEnlargedImage
使得其中一个阻止另一个触发?
推荐阅读
- labelimg - 如何解决“ModuleNotFoundError: No module named 'PyQt5'”?
- php - 递归函数不返回任何内容
- java - 用于将图像转换为 jpeg 并对其进行压缩的 Java 类 - 输入和输出参数是一个包含图像本身的 blob
- ruby-on-rails - 在 Ruby 中获取 NoMethodError 未定义的方法
- mql4 - 评论未在交易 MQL4 中使用
- kotlin - 在 Kotlin IR 编译器中使用“this”关键字
- angular - 如何根据您所在的页面更改导航栏的内容,并放置正确的根?
- json - 将 Ecto 查询中的所有字段作为映射返回,以便将结果作为 json 发送回?
- python - Databricks 从 repo 内的 python lib 导入/复制数据
- python - sqlalchemy 添加了新列和“UndefinedColumn”错误