调用 `tableView.reloadData()` 后 TableView 无法重新加载

TableView fail to reload after `tableView.reloadData()` is called

我有两个标签。第一个选项卡包含 UITableViewController,其 tableView 的单元格包含一些单词。第二个选项卡用于设置,包含一个 tableView,以及一个用于设置字体大小的单元格。用户点击单元格后,用户将进入更改字体大小的界面。当用户按下 "save" 按钮时,(编辑字体大小界面中的一个按钮,用于保存调整后的字体大小。)顶视图控制器弹出回原始 table 视图进行设置。

当按下保存按钮时,我使用观察者 post 通知,相应的观察者将更新其视图。我在 tableView 中添加了一个观察器来进行设置,它起作用了。当弹出用于编辑字体大小的顶视图控制器时,原始 tableView 会显示调整后的字体大小。

但是,当我在第一个选项卡的 UITableViewController 中添加观察者时,table 视图没有重新加载。我在 NotificationCenter.default.addObserver(_:selector:name:object:) 的选择器方法中添加了一条打印消息,并确认调用了选择器方法。选择器方法如下所示:

@objc func reloadTableView() {
    print("The method is called.")
    tableView.reloadData()
}

我在第一个选项卡的 tableView 单元格中使用字体大小的代码:

labelOne.font = UIFont(descriptor: fontDescriptor, size: fontSizeForLabelOne)
labelTwo.font = UIFont(descriptor: fontDescriptor, size: fontSizeForLabelTwo)

我觉得很困惑,既然调用了重新加载table视图的方法,但是table视图没有重新加载?由于字体大小已更改,因此当我滚动 tableView 时,新单元格随机采用旧字体大小或调整后的字体大小。

我也尝试过使用标签,即使它在不同的选项卡中,它也适用于它们。换句话说,我认为问题只发生在 tableView.

另一方面,因为它适用于设置选项卡中的 table 视图,所以我说 tableView 只能在调用 tableView.reloadData() 时重新加载是否正确table视图即将呈现?如果tableView不呈现,调用tableView.reloadData(),什么也不会发生,一切照旧?

简而言之,有没有办法确保在我更改字体大小时 tableView 重新加载?

@objc func reloadTableView() {
    print("The method is called.")
     DispatchQueue.main.async {
           tableView.reloadData()
        }
    
}

最终我找到了一个解决方案,因为我的视图控制器由导航控制器管理,我弹出视图控制器并再次加载它作为重新加载 table 视图的替代方法。即,

@objc func reloadTableView() {
    navigationController.popViewController(animated: false)
    navigationController.pushViewController(theViewController, animated: false)
}

唯一的缺点是视图控制器将重置为初始状态,即如果视图控制器中的 table 视图向下滚动,当用户从设置,table 视图将重置到其顶部位置,并且不显示滚动到的位置。