UICollectionViewCell嵌套UIView内UILabel不更新问题求助
问题原因与解决方案:UICollectionViewCell嵌套视图文本无法更新
问题根源
你在RecepieCardCollectionViewCell的初始化方法里犯了变量遮蔽的错误:
- 类成员变量已经声明了
let cardInfoView = RecepieCardInfoView(frame: .zero) - 但在
init(frame:)里又创建了一个同名局部变量let cardInfoView = RecepieCardInfoView(frame: .zero),并把这个局部视图添加到了界面上 - 你在
configure方法里更新的是成员变量的cardInfoView,但这个视图从未被加入视图层级,界面显示的是那个没被配置过的局部视图,所以始终显示占位文本。
解决方案
删除初始化方法里的局部变量声明,直接使用类成员变量添加到视图层级:
修改后的RecepieCardCollectionViewCell初始化方法关键代码:
override init(frame: CGRect) { super.init(frame: frame) backgroundColor = .themeWhite layer.cornerRadius = 40 addSubview(content) content.frame = bounds content.addSubview(thumbnail) // 移除这一行的局部变量声明:let cardInfoView = RecepieCardInfoView(frame: .zero) content.addSubview(cardInfoView) // 直接使用类的成员变量 layer.shadowColor = UIColor.black.cgColor layer.shadowOpacity = 0.17 layer.shadowOffset = .zero layer.shadowRadius = 10 NSLayoutConstraint.activate([ thumbnail.leadingAnchor.constraint(equalTo: content.leadingAnchor), thumbnail.trailingAnchor.constraint(equalTo: content.trailingAnchor), thumbnail.topAnchor.constraint(equalTo: content.topAnchor), thumbnail.heightAnchor.constraint(equalTo: thumbnail.widthAnchor), cardInfoView.topAnchor.constraint(equalTo: content.bottomAnchor, constant: -100), cardInfoView.bottomAnchor.constraint(equalTo: content.bottomAnchor), cardInfoView.leadingAnchor.constraint(equalTo: content.leadingAnchor), cardInfoView.trailingAnchor.constraint(equalTo: content.trailingAnchor), ]) }
额外优化建议
你的content视图目前用frame = bounds设置布局,这在cell复用或尺寸变化时容易出问题,建议改用约束固定:
addSubview(content) // 替换 content.frame = bounds 为以下代码 content.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ content.topAnchor.constraint(equalTo: self.topAnchor), content.leadingAnchor.constraint(equalTo: self.leadingAnchor), content.trailingAnchor.constraint(equalTo: self.trailingAnchor), content.bottomAnchor.constraint(equalTo: self.bottomAnchor), // 原有的thumbnail和cardInfoView约束... ])
内容的提问来源于stack exchange,提问作者Daniel Ramos
相关产品推荐
相关产品推荐

