我正在为我的应用中的某些公告制作搜索功能。我在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问题调用上面提到的那些不同方法,但都没有运气。
答案 0 :(得分:1)
在表格上调用beginUpdates
和endUpdates
会强制重新计算所有行的高度。
如果您实现UITableView
的行插入/删除方法而不是使用reloadData
,我认为您会发现整个体验更容易(并且对您的用户更加满意!) / p>
答案 1 :(得分:1)
我覆盖tableView(_:heightForRowAtIndexPath:)
并返回tableView.estimatedRowHeight
。我把方法改为:
override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return tableView.estimatedRowHeight
}