一点点背景
我正在为我的应用程序中的某些公告创建搜索功能。我将初始公告加载到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()
,didSet
,filteredAnnouncements
。我试图覆盖自定义单元格类中的
didMoveToSubview()
方法,以根据一个旧的stackoverflow问题调用上面命名的那些不同方法,所有方法都没有运气。编辑:下面回答自己的问题
最佳答案
在表上调用beginUpdates
和endUpdates
将强制其重新计算所有行的高度。
如果您实现UITableView
的行插入/删除方法而不是使用reloadData
,我认为您会发现整个体验要容易得多(并使您的用户更满意!)。