在UITableViewCell的layoutSubviews添加视图、布局问题()-其他
在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操作视图及布局。
————————
背景
在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操作视图及布局。