Swift 3:自定义UITableViewCell中的UILabel未显示

5

我有一个名为CCLineupTableViewCell的自定义单元格,看起来像这样:

@IBOutlet weak var artistNameLabel: UILabel!
@IBOutlet weak var artistValuationLabel: UILabel!

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code

}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

我可以像这样在cellForRowAt indexPath: IndexPath方法中访问单元格:

let cell = tableView.dequeueReusableCell(withIdentifier: "HomeCell", for: indexPath) as! CCLineupTableViewCell

我的自定义单元格设置如下:

enter image description here

enter image description here

正如您所看到的,它在IB和代码中都进行了设置。奇怪的是,第一个标签artistNameLabel可以通过cellForRowAt indexPath: IndexPath访问并且完美地工作。但是,artistValuationLabel却从未出现过,尽管在storyboard中有默认文本。

编辑:

我已经添加了来自nib的约束图片。它被锚定到单元格的右侧、顶部和底部(以及纵横比)。

enter image description here


1
你是否检查了 UITableViewCell 的约束条件,也许标签没有显示是因为约束出错了。 - Santiago Carmona González
@Santiagocarmonagonzález 约束是好的,但我会发布它们。 - Clayton C.
尝试将“内容压缩阻力优先级”属性中的Horizontal设置为比artistNameLabel标签更高的值,或者使用常量约束宽度值。 - Santiago Carmona González
2个回答

5

你的错误在于你设置的约束条件出了问题。

添加一个宽度约束条件,以确保artistValuationLabel有足够的空间显示。


有人知道为什么会发生这种情况吗?adjustsFontSizeToFitWidth属性被设置为true。希望这个问题能够得到解决,因为aspectRatio已经正确设置(所有其他约束也是如此)。如果我不问这个问题,我就没有办法知道出了什么问题。 - Clayton C.
这可能是因为artistNameLabel的宽度优先级高于artistValuationLabel,所以当名称非常长时,该标签将占用其他标签“保留”的空间。当您为artistValuationLabel设置特定宽度时,它具有1000优先级,因此该空间将始终保留。 - Santiago Carmona González
但是标签不重叠,我已经更改了它,以便有一个约束来防止这种情况发生。我去掉了宽度,看看是否有效,但仍然无法解决,所以我不得不把它放回去。 - Clayton C.
如果您删除了宽度约束,但仍然无法正常工作,则可能是因为约束中仍存在错误或标签文本为空。 - Santiago Carmona González
文本通过 print(artistValuationLabel.text) 打印到屏幕上。一定是约束的问题 - 我只是不知道在哪里。无论如何,我会留意的,再次感谢您的帮助。 - Clayton C.

0
由于宽度约束不当,导致出现了这个问题。您需要添加比例宽度或在您设计的设备上运行。

您也可以给出左侧约束。 - anshul king

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接