一点点背景
我正在为我的应用程序中的某些公告创建搜索功能。我将初始公告加载到UITableView中,以显示自定义单元格。为了在viewDidLoad()类的AnnouncementTableViewController方法中实现动态单元格大小,我使用了自动调整大小技术:

tableView.estimatedRowHeight = tableView.rowHeight
tableView.rowHeight = UITableViewAutomaticDimension
这非常适合显示各种高度的单元格。刷新单元格数据时调用tableView.reloadData()效果很好。
我有一个不同的UITableView,它最初显示一个空白的tableview和一个UISearchBar作为标题。我实现了UISearchBarDelegate方法searchBar(_:textDidChange:),执行搜索过滤器逻辑,并将过滤后的公告附加到filteredAnnouncements数组中。
我在tableView.reloadData()中将didSet称为filteredAnnouncements方法。
问题
当我在搜索栏中键入内容时,单元格不会自动调整其大小,实际上它们是默认高度。每个公告都有标题和正文,因此正文会被截断。

我尝试过的UITableAutomaticDimension技巧似乎不适用于实时搜索(每次按键后都会更新)。我尝试在tableView.setNeedsDisplay()数组的tableView.setNeedsUpdatedConstraints观察器中调用tableView.setNeedsLayout()didSetfilteredAnnouncements
我试图覆盖自定义单元格类中的didMoveToSubview()方法,以根据一个旧的stackoverflow问题调用上面命名的那些不同方法,所有方法都没有运气。
编辑:下面回答自己的问题

最佳答案

在表上调用beginUpdatesendUpdates将强制其重新计算所有行的高度。

如果您实现UITableView的行插入/删除方法而不是使用reloadData,我认为您会发现整个体验要容易得多(并使您的用户更满意!)。

10-07 19:05
查看更多