【发布时间】: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