在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操作视图及布局。
浙公网安备 33010602011771号