【问题标题】:TableView fail to reload after `tableView.reloadData()` is called调用 `tableView.reloadData()` 后,TableView 无法重新加载
【发布时间】:2019-08-02 09:09:11
【问题描述】:

我有两个标签。第一个选项卡包含一个UITableViewController,其tableView 的单元格包含一些单词。第二个选项卡用于设置,包含一个 tableView,带有一个用于设置字体大小的单元格。用户点击单元格后,用户将进入更改字体大小的界面。当用户按下“保存”按钮时,(editing-font-size界面中的一个按钮,用于保存调整后的字体大小。)顶视图控制器弹回原来的tableView进行设置。

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

但是,当我在第一个选项卡的UITableViewController 中添加观察者时,不会重新加载 tableView。我在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)

这似乎让我很困惑,因为调用了重新加载tableView的方法,但没有重新加载表格视图?而且由于字体大小发生了变化,当我滚动 tableView 时,新单元格会随机使用旧字体大小或调整后的字体大小。

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

另一方面,由于它适用于设置选项卡中的表格视图,我是否可以说只有在表格即将呈现时调用tableView.reloadData()时才能重新加载表格视图?如果不呈现tableView,调用tableView.reloadData(),什么都不会发生,一切都保持不变?

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

【问题讨论】:

  • 您在哪里使用 tableView 单元格中更新的字体大小?
  • 在每个tableView单元格中,我有两个UILabel,它们会随着字体大小的变化而变化。
  • 相信我,您以非常复杂的方式提出了您的问题,您对问题的描述太混乱了。请使用具体而清晰的东西。
  • 在两个选项卡中添加两个控制器的完整代码,以便我们为您提供更具体的解决方案。

标签: ios swift uitableview notificationcenter


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:
    @objc func reloadTableView() {
        print("The method is called.")
         DispatchQueue.main.async {
               tableView.reloadData()
            }
        
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多