条形按钮项目自定义视图未检测到 UITapGesture

Bar button item custom view not detecting UITapGesture

我遇到了一些奇怪的行为,其中 UIBarButtonItem.customView 中的子视图没有触发 tapGesture

private var leftBarButtonItem: UIBarButtonItem = {
    let b = UIBarButtonItem()
    return b
}()

private lazy var imageView: UIImageView = {
    let iv = UIImageView()
    //... some adicional setup
    iv.isUserInteractionEnabled = true
    return iv
}()


func setupBBItem() {
    let holderView = UIView()
    holderView.isUserInteractionEnabled = true
    
    holderView.addSubview(imageView)
    imageView.frame = //... some frame
    //... more setups here
    
    holderView.isUserInteractionEnabled = true
    
    
    leftBarButtonItem.customView = holderView
    navigationItem.leftBarButtonItem = leftBarButtonItem
    
    let gesture = UITapGestureRecognizer(target: self, action: #selector(someFunction))
    imageView.addGestureRecognizer(gesture)
}

@objc private func someFunction() {
    print("tap gesture detected")
}

我什至尝试将手势添加到 holderView,但结果是一样的,该功能永远不会触发。

我是不是漏掉了什么?

问题出在这一行:

let holderView = UIView()

这是一个零大小的视图。所以它的子视图,图像视图,可以被看到但不能被点击,因为在它的父视图之外的视图的任何部分是用户不可触及的。你需要给 holder view 一些尺寸,让它至少和 image view 一样大。特别是,您必须在内部使用自动布局约束对 holder view 和 image view 执行此操作。这就是条形按钮项目自定义视图获取其大小的方式。