记录一个iOS自定义View使用中遇到问题

iOS在使用自定义VIew时,会出现无法响应点击事件的问题,大概的原因有一下几种:

  1. 被其他透明的视图挡住
  2. 没有设置 userInteractionEnabled 为 yes
  3. frame 设置不准确
  4. 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()
        }

在这里记录一下,下次不会在犯同样的错误。

你可能感兴趣的:(iOS,知识备忘录)