0
class ChatCollectionViewCell: UICollectionViewCell {
var chatView: UIView!
var chatTextView: UITextView!
var isTextFromCurrentUser: Bool = true
var chatViewWidth: CGFloat = 200
override init(frame: CGRect) {
super.init(frame: frame)
chatView = UIView()
chatTextView = UITextView()
contentView.addSubview(chatView)
contentView.addSubview(chatTextView)
setupViews()
}
override func layoutSubviews() {
if isTextFromCurrentUser {
chatView.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 10).isActive = true
chatTextView.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 15).isActive = true
chatTextView.backgroundColor = .white
} else {
chatView.rightAnchor.constraint(equalTo: self.rightAnchor, constant: -10).isActive = true
chatTextView.rightAnchor.constraint(equalTo: self.rightAnchor, constant: -15).isActive = true
chatTextView.backgroundColor = UIColor(r: 157, g: 255, b: 164)
}
chatView.widthAnchor.constraint(equalToConstant: chatViewWidth).isActive = true
chatView.topAnchor.constraint(equalTo: self.topAnchor, constant: 10).isActive = true
chatTextView.widthAnchor.constraint(equalTo: chatView.widthAnchor, constant: -10).isActive = true
chatTextView.topAnchor.constraint(equalTo: chatView.topAnchor, constant: 5).isActive = true
chatView.translatesAutoresizingMaskIntoConstraints = false
chatTextView.translatesAutoresizingMaskIntoConstraints = false
}
func setupViews() {
chatView.backgroundColor = .blue
chatTextView.font = UIFont.systemFont(ofSize: 16)
chatTextView.layer.cornerRadius = 9
chatTextView.clipsToBounds = true
chatTextView.isScrollEnabled = false
}
override func prepareForReuse() {
super.prepareForReuse()
chatView = nil
chatTextView = nil
chatView = UIView()
chatTextView = UITextView()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}UICollectionViewCell沒有共同祖先的錯誤(不重複)
(澄清,我設置chatViewWidth並在視圖控制器的cellForRow方法chatTextView.text屬性)
,因此,現在的XCode給出的錯誤如下:「無法激活約束和錨,並且因爲它們沒有共同的祖先。約束或其錨是否引用不同視圖層次中的項?
我查看了許多關於StackOverflow上的常見祖先錯誤的帖子,但沒有一個解決方案解決了我的問題。
這很混亂。 我試着用斷點來分析錯誤,但程序在創建約14個單元左右後崩潰。有時它可以工作,但是當我添加更多單元時,它將開始崩潰。我不確定問題是什麼 - 我的觀點肯定是CollectionViewCell的兒童觀點,對嗎?
謝謝!
你重新創建prepareForReuse的意見,但你不添加新的子視圖。 –
1.您可以將約束設置爲self,而不是來自chatView的超級視圖。意味着你將它們添加到單元格的contentView中。 2.如果iam沒有錯,LayoutSubviews會被調用很多次,爲什麼不在setupViews上設置約束呢? 3. LayoutSubviews不會調用super.layoutSubviews,這可能會帶來一些問題。嘗試在layoutSubviews中打印,如果你想使用prepareForReuse,它應該會出現很多次,如果我沒有錯誤 –
,建議清除模型的內容,而不是刪除它們。之後,再次調用setupView並設置約束。當您設置「isTextFromCurrentUser」時,您可以調用屬性上的didSet方法並更改約束。 –