如何在 UITableView 中刷新单节标题的文本

Posted

技术标签:

【中文标题】如何在 UITableView 中刷新单节标题的文本【英文标题】:How to refresh single section header's text in UITableView 【发布时间】:2019-07-12 16:52:50 【问题描述】:

我正在使用表格视图来显示清单。某些视图按类型对列表项进行分组。对于这些,我在括号中显示类型名称和项目计数(例如“今天要做的事情(58)”)。

我想在用户删除或完成项目时刷新该字符串以反映更新后的计数。

这可以通过设置标题的textLabel 属性并调用setNeedsLayout() 轻松完成。问题是,它改变了文本的外观。

之前(所有大写默认部分标题字体,例如“THINGS TO DO TODAY (58)”): screenshot - before

之后(不再全部大写,例如“今天要做的事情 (58)”): screenshot - after

这是我目前用来刷新标题的代码:

func refreshHeaderTitleForSection(_ section: Int) 
    if let header = tableView.headerView(forSection: section) 
      header.textLabel?.text = getHeaderTitleForSection(section)
      header.setNeedsLayout()
     else 
      return
    
  

当表格视图加载时,我调用getHeaderTitleForSection() 来获取titleForHeaderInSection 的字符串,所以它应该是相同的。有没有办法告诉它在不定义自定义标题视图的情况下保持默认格式?

【问题讨论】:

【参考方案1】:

您的getHeaderTitleForSection 方法可能会返回非大写字符串。无论您从 titleForHeaderInSection 返回什么,UITableView 都会自动以全部大写形式显示节标题。

最简单的解决方案是在更新标题视图时强制全部大写。

header.textLabel?.text = getHeaderTitleForSection(section).uppercased()

【讨论】:

谢谢@rmaddy,是的,这将在这个例子中起作用。我应该澄清一下,我在整个应用程序的几个地方重用了这个视图。屏幕截图显示其外观为使用分组表视图的独立(全屏)视图控制器。有时它是容器化的而不是分组的,并且标题并非全部大写。我真正想要的是保留文本的初始外观,只需刷新字符串的内容。

以上是关于如何在 UITableView 中刷新单节标题的文本的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iphone 中刷新 UITableView?

如何添加拉表视图以刷新 uitableview 内的数据

如何初始加载 UITableView 然后观察 Firebase 节点以更改在 Swift 中刷新 tableview?

如何刷新 UITableView 数据?

在 UITableview 内的自动调整大小的标签上设置非常长的文本会破坏 NSLayoutConstraint

UITableView 拉动刷新导致闪烁。如何预防?