如何在不重新加载表格的情况下调整表格单元格内的标签大小?

Posted

技术标签:

【中文标题】如何在不重新加载表格的情况下调整表格单元格内的标签大小?【英文标题】:How can I resize a label within a table cell without reloading table? 【发布时间】:2016-11-05 00:25:56 【问题描述】:

我有一个表格,单元格有一个标签,我希望能够直接更新标签,而无需重新加载表格或单元格。我找到了一种方法来做到这一点并且它有效:

let cell = self.tableView.cellForRowAtIndexPath(NSIndexPath(forRow: index, inSection: 0)) as! cellClass
     cell.textLabel.text = newText as? String

唯一的问题是标签的大小没有改变。如果重新加载表格,标签会更改大小以适应文本量。我尝试使用 layoutIfNeeded() 和 sizeToFit() 但标签不会延伸到第二行。宽度不是什么大问题,主要是它没有换行,所以换句话说,高度不会延伸到更多的行。

【问题讨论】:

也喜欢我的回答***.com/questions/40293336/… 你试过tableView.beginUpdates()然后tableView.endUpdates()吗? beginUpdates/endUpdates 有一些东西。它正在做我想做的事,但问题是有时这个标签会很快更新,并且在发生这种情况时似乎会崩溃。对于一两次更新,它可以工作。我尝试获取主队列但仍然崩溃。知道为什么要这样做吗? 【参考方案1】:

首先,我建议创建一个自定义单元格(UITableViewCell 的子类),并将该 UILabel 命名为不同的名称,例如 articleTitleLabel(取决于您的上下文)。 “textLabel”是一个继承属性,我猜你仍然可以使用它,但请确保在“awakeFromNib”方法中自定义它(设置 numberOfLines = 0 或 2)。我还建议在自定义单元类中添加一个公共实例方法。像这样的:

function configureWithText(text: String) 
    articleTitleLabel.text = text
    // or, textLabel.text = text

此外,您可能需要为自定义单元格创建一个 .xib 文件,并为您的标签设置一些顶部、底部、左侧和右侧约束。

希望对你有帮助!

【讨论】:

没用。我已经在做大部分这些事情,并添加了一个函数而不是直接更改文本,但它做同样的事情。

以上是关于如何在不重新加载表格的情况下调整表格单元格内的标签大小?的主要内容,如果未能解决你的问题,请参考以下文章

Swift:每次重新加载时都会一次又一次地添加表格视图单元格内容?

在不重新加载整个表格视图的情况下更改 UITableView 的部分页眉/页脚标题

tableview 单元格内的集合视图重新加载数据

如何在表格视图单元格内创建集合视图

如何从表格视图的自定义单元格内的文本字段中获取值(标签)以发布到 URL [重复]

如何从表格视图的自定义单元格内的 TextField 获取值(标签)以发布到 te URL