gpt4 book ai didi

ios - NSLayoutConstraints 在 UITableViewCell 中不受尊重

转载 作者:可可西里 更新时间:2023-11-01 00:19:37 26 4
gpt4 key购买 nike

我有一个带有 UILabelUIImageViewUITableViewCell。图像可以是可见的或隐藏的。

这是我的 Storyboard: storyboard screenshot

UILabel 的尾部有两个约束,一个 (a) 对于 UIImageView 等于 8,另一个 (b) 大于或等于 8 与单元格的右边距。我保留第一个 (a) 的引用,如果有或没有声音,我会激活或停用约束。

这是我的代码:

class MyTableViewCell: UITableViewCell {

@IBOutlet weak var label: UILabel?
@IBOutlet weak var icon: UIImageView?
@IBOutlet weak var spaceBetweenIconAndLabelConstraint: NSLayoutConstraint?

override func awakeFromNib() {
super.awakeFromNib()
icon?.image = UIImage(named: "sound")
}

func config(with name: String, hasSound: Bool) {
label?.text = name
configSound(hasSound)
}

private func configSound(_ hasSound: Bool) {
icon?.isHidden = !hasSound
spaceBetweenIconAndLabelConstraint?.isActive = hasSound
}
}

我有几个单元格可以看到声音图标,很多单元格没有。这是特定单元格首次出现时的样子:

good behaviour

当它再次出现在屏幕上时它的样子:

bad behaviour

我知道问题出在重复使用的电池上。但我不明白如何防止这种行为。我尝试这样做:

override func prepareForReuse() {
configSound(true)
}

在重用单元格之前重新激活约束,但它不起作用。

最佳答案

我认为问题在于您对约束使用了 weak 引用。在这种情况下,一旦其 isActive 属性首次设置为 false,约束就会被删除。从那以后,它是 nil 并且无法重新激活。

解决方案:通过删除 weak 关键字来使用强引用。

@IBOutlet var spaceBetweenIconAndLabelConstraint: NSLayoutConstraint!

关于ios - NSLayoutConstraints 在 UITableViewCell 中不受尊重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53695552/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com