我将所有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
行也不会注册。
答案 0 :(得分:0)
我在this Answer.的评论中发现了自己的问题 我的scrollView内的contentView拥有所有其他视图,高度为0,因此无法单击。通过赋予视图高度,它可以起作用:
contentView.heightAnchor.constraint(equalTo: self.frameLayoutGuide.heightAnchor, multiplier: 1).isActive = true