【问题标题】: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() 但标签不会延伸到第二行。宽度不是什么大问题,主要是它没有换行,所以换句话说,高度不会延伸到更多的行。

【问题讨论】:

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

标签: ios swift uitableview uilabel


【解决方案1】:

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

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

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

希望对你有帮助!

【讨论】:

  • 没用。我已经在做大部分这些事情,并添加了一个函数而不是直接更改文本,但它做同样的事情。
猜你喜欢
  • 1970-01-01
  • 2012-08-22
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多