在UITableViewCell的layoutSubviews添加视图、布局问题

背景

在UITableViewCell中显示多个标签,直到标签放不下。但是cell的宽度在initWithStyle时无法获知,而又不想传进cell中,故在layoutSubviews中处理。

具体问题

点击在layoutSubviews中添加的元素,cell出现选中态,但是没有走didSelectRowAt方法。

class FCTableViewCell: UITableViewCell {
    let bgView = UIView()
    let orangeView = UIView()
    
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        
        setupViews()
        setupConstraints()
    }
    
    func setupViews() {
        bgView.backgroundColor = .red
        contentView.addSubview(bgView)
    
        orangeView.backgroundColor = .orange } func setupConstraints() { bgView.snp.makeConstraints { make
in make.top.equalToSuperview().offset(20) make.leading.equalToSuperview().offset(30) make.bottom.equalToSuperview() make.width.equalTo(200) } } override func layoutSubviews() { super.layoutSubviews()
// 在公司项目中点击orangeView,出现选中态,但不响应didSelectRowAt
// 该demo中,长按orangeView,出现选中态
for view in bgView.subviews { view.removeFromSuperview() } bgView.addSubview(orangeView) orangeView.snp.makeConstraints { make in make.top.leading.bottom.equalToSuperview() make.width.equalTo(100) } } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } }

在写这个代码时,心里其实是不放心的,但为了偷懒,就这么写了。

具体解决

cell中传入width,不在layoutSubviews操作视图及布局。

posted @ 2023-03-17 10:56  夏风已过  阅读(106)  评论(0)    收藏  举报