scrollView中的GestureRecognizer无法正常工作

时间:2018-09-24 12:52:37

标签: ios swift uiview uiscrollview uigesturerecognizer

我将所有UIElement都移到了scrollView中,以避免加载UIViewcontroller。但是现在视图上的GestureRecognizers不再起作用。

“我的视图”层次结构如下:

  
      
  • UIViewController(SingleEventController)      
        
    • UIScrollView(EventScrollView)      
          
      • UIView(contentView)      
            
        • UILabel,UIView,UITableView等。
        •   
      •   
    •   
  •   

这似乎是一个常见问题,因为我在Stackoverflow上发现了很多类似的东西: Example 1 Example 2。 尽管如此,我还是无法解决我的情况。

EventScrollView 中的简化代码如下:

let locationLabel: UILabel = {
    let label           = UILabel()
    label.text          = "Standort"
    label.isUserInteractionEnabled = true //Important!
    return label
}()

override init(frame: CGRect) {
    super.init(frame: frame)
    self.isUserInteractionEnabled = true //not needed!
    contentView.isUserInteractionEnabled = true //Important!
}

func setupViews() {
    guard let parent = parentVC else { return }
    let locationTap = UITapGestureRecognizer(target: parent, action: #selector(parent.openInGoogleMaps))
    locationTap.cancelsTouchesInView = false //Important!

    addSubview(contentView)
    contentView.addSubview(locationLabel)
    locationLabel.addGestureRecognizer(locationTap)
}

我错过了哪一步? 顺便说一句,单击 contentView 内的UITableView行也不会注册。

1 个答案:

答案 0 :(得分:0)

我在this Answer.的评论中发现了自己的问题 我的scrollView内的contentView拥有所有其他视图,高度为0,因此无法单击。通过赋予视图高度,它可以起作用:

contentView.heightAnchor.constraint(equalTo: self.frameLayoutGuide.heightAnchor, multiplier: 1).isActive = true