文本更改后 UILabel 不换行

UILabel not wrapping after the text is changed

我有一个 UI 标签,我将 numberOfLines 设置为 0,以便在需要时换行。

我偶尔会更改文本。有时它只需要一行,但当文本太长时它会截断而不是换行。标签仅在我刷新 table 视图时换行,调用 reloadData().

有没有办法不用调用reloadData()自动换行标签?

重新加载 table 视图之前:

重新加载 table 视图后:

当您更改 table 视图单元格中标签中的文本时,table 视图不会自动重新计算单元格大小。

为此,您可以重新加载数据 - 如您所见 - 或者执行以下两行:

tableView.beginUpdates()
tableView.endUpdates()

如果您要从 内部 单元格 class 更新标签中的文本,您需要使用委托/协议模式来告诉 table 执行这两行的视图控制器。

重新加载单元格是让它正确布局的正确方法。但是您不必调用 reloadData(它会重新加载整个 table)。您可以执行 reloadRows(at:with:),仅为这一行提供索引路径。它还允许您指定所需动画的性质(如果有)。