iOS在使用自定义VIew时,会出现无法响应点击事件的问题,大概的原因有一下几种:
- 被其他透明的视图挡住
- 没有设置 userInteractionEnabled 为 yes
- frame 设置不准确
- tableView中的 cell 高度不够
我遇到的问题是第三种,frame 设置不准确
companyCarCountView.snp.makeConstraints { (make) in
make.bottom.equalTo(labelDateView.snp_top).offset(-8)
make.width.equalTo(dataCountViewWidth)
make.left.equalToSuperview()
}
这里我用的是约束来确定view的位置,可以看到我没有设置高度,因为我的自定View是两个UILabel的组合不设置高度也能正常显示,代码如下:
import UIKit
import SnapKit
class DataCountView: UIView {
var labelName : UILabel!
var labelCount : UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
isUserInteractionEnabled = true
labelName = UILabel.init()
labelName.textAlignment = NSTextAlignment.center
labelName.font = UIFont.systemFont(ofSize: 13)
labelName.text = "企业车辆数"
labelName.textColor = MUIColor.TextContentColor
labelCount = UILabel.init()
labelCount.font = UIFont.systemFont(ofSize: 24, weight: UIFont.Weight.bold)
labelCount.textAlignment = NSTextAlignment.center
labelCount.text = "0"
labelCount.textColor = MUIColor.TextTitleColor
self.addSubview(labelName)
self.addSubview(labelCount)
labelName.snp.makeConstraints { (make) in
make.left.equalToSuperview()
make.right.equalToSuperview()
make.bottom.equalToSuperview().offset(-8)
}
labelCount.snp.makeConstraints { (make) in
make.left.equalToSuperview()
make.right.equalToSuperview()
make.bottom.equalTo(labelName.snp_top).offset(-8)
}
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
这样就造成了显示没问题,但是点击事件无法触发了,因为frame 设置不准确 ,将约束代码加上高度之后,点击事件就可以正常触发啦,代码如下:
companyCarCountView.snp.makeConstraints { (make) in
make.bottom.equalTo(labelDateView.snp_top).offset(-8)
make.width.equalTo(dataCountViewWidth)
make.height.equalTo(54)
make.left.equalToSuperview()
}
在这里记录一下,下次不会在犯同样的错误。