当我在收藏视图中滚动时,我的自定义单元格中的 UIView 锚点不断变化
Posted
技术标签:
【中文标题】当我在收藏视图中滚动时,我的自定义单元格中的 UIView 锚点不断变化【英文标题】:My UIView anchors in my custom cell keep changing when I scroll in my collection view 【发布时间】:2020-10-20 16:04:17 【问题描述】:我有一个消息传递应用程序,并且显示的消息在集合视图中,我有一个自定义单元格,其中我有一个显示消息的文本视图,然后我将 textview 放在 UIView 中,以便我可以给出消息背景颜色取决于发送消息的用户
我的自定义单元格中的函数将背景视图设置为右侧或左侧,具体取决于 消息是否来自当前用户
我通过在我的消息模型中上传信息来做到这一点,如果消息来自当前用户或 UID 不同的用户,因为我正在使用 Firestore
当我有足够的消息可以滚动集合视图时会发生什么,约束随机开始变化并且一些单元格背景视图扩展集合的整个宽度
我尝试将我的函数放入 dispatchQueue 中,但仍然遇到同样的问题
有什么想法吗??
class MessageCell: UICollectionViewCell
var bubbleLeftAnchor : NSLayoutConstraint!
var bubbleRightAnchor: NSLayoutConstraint!
var messagess : Message?
didSet
configure()
let label : UITextView =
let lbl = UITextView()
lbl.backgroundColor = .clear
lbl.font = .systemFont(ofSize: 16)
lbl.textColor = .black
lbl.isEditable = false
lbl.isScrollEnabled = false
return lbl
()
var bubble : UIView =
let view = UIView()
view.layer.cornerRadius = 5
return view
()
override init(frame: CGRect)
super.init(frame: .zero)
addSubview(bubble)
bubble.addSubview(label)
bubble.anchor(top: topAnchor, bottom: bottomAnchor, paddingTop: 10 , paddingLeft: 50, paddingBottom: 20)
bubble.widthAnchor.constraint(lessThanOrEqualToConstant: 250).isActive = true
label.anchor(top: bubble.topAnchor, left: bubble.leftAnchor, bottom: bubble.bottomAnchor, right: bubble.rightAnchor, paddingTop: 4, paddingLeft: 4, paddingBottom: 4, paddingRight: 4)
required init?(coder: NSCoder)
fatalError("init(coder:) has not been implemented")
func configure()
label.text = messagess?.message
bubble.backgroundColor = messagess?.isFromCurrentUser == true ? .green : .purple
guard let messagess = messagess else return
bubbleLeftAnchor = bubble.leftAnchor.constraint(equalTo: leftAnchor, constant: 12)
bubbleRightAnchor = bubble.rightAnchor.constraint(equalTo: rightAnchor, constant: -12)
if messagess.fromId == Auth.auth().currentUser?.uid
bubbleLeftAnchor.isActive = false
bubbleRightAnchor.isActive = true
else
bubbleRightAnchor.isActive = false
bubbleLeftAnchor.isActive = true
【问题讨论】:
【参考方案1】:每次调用configure()
时,您都会创建新约束。
你需要移动这两行:
bubbleLeftAnchor = bubble.leftAnchor.constraint(equalTo: leftAnchor, constant: 12)
bubbleRightAnchor = bubble.rightAnchor.constraint(equalTo: rightAnchor, constant: -12)
从configure()
到您的init()
函数:
override init(frame: CGRect)
super.init(frame: .zero)
addSubview(bubble)
bubble.addSubview(label)
bubble.anchor(top: topAnchor, bottom: bottomAnchor, paddingTop: 10 , paddingLeft: 50, paddingBottom: 20)
bubble.widthAnchor.constraint(lessThanOrEqualToConstant: 250).isActive = true
label.anchor(top: bubble.topAnchor, left: bubble.leftAnchor, bottom: bubble.bottomAnchor, right: bubble.rightAnchor, paddingTop: 4, paddingLeft: 4, paddingBottom: 4, paddingRight: 4)
// create these constraints in init
bubbleLeftAnchor = bubble.leftAnchor.constraint(equalTo: leftAnchor, constant: 12)
bubbleRightAnchor = bubble.rightAnchor.constraint(equalTo: rightAnchor, constant: -12)
【讨论】:
@farooq - 如果此答案解决了您的问题,请务必将其标记为“已接受”,以便其他可能遇到您问题的用户受益。 是的,我确实标记了它,但由于我是新人,所以我的声誉仍然在 15 岁以下,所以没有出现,但仍然被注册 哎呀——我应该注意到了。以上是关于当我在收藏视图中滚动时,我的自定义单元格中的 UIView 锚点不断变化的主要内容,如果未能解决你的问题,请参考以下文章
滚动时自定义 UITableViewCell 中的 UITextFields 文本出现在其他单元格中