我有一个表视图控制器与一个UISearchController设置UISearchBar作为tableView.tableHeaderView.更新搜索结果时,我使用beginUpdates和endUpdates和相关方法更新表视图的数据.
这使搜索栏消失; tableHeaderView设置为与搜索栏大小相同的空的通用UIView.如果我只是使用reloadData而不是整个beginUpdates / endUpdates过程,一切都很好.
表视图控制器嵌入在常规视图控制器中;没有导航控制器.这是整个执行表视图控制器所必需的重现问题:
- (void)viewDidLoad { [super viewDidLoad]; self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; self.searchController.searchResultsUpdater = self; self.searchController.dimsBackgroundDuringPresentation = NO; self.tableView.tableHeaderView = self.searchController.searchBar; } - (void)updateSearchResultsForSearchController:(UISearchController *)searchController { [self.tableView beginUpdates]; [self.tableView endUpdates]; }
为什么这会导致搜索栏被空白的视图所替代,如何才能避免?
解决方法
当您首次点击UISearchController的searchBar时,searchBar的动画需要大约0.5秒.但是由委托方法立即调用self.tableView.endUpdates(),动画被中断.
searchBar卡在动画的中间,你看不到它的UI:
searchBar卡在动画的中间,你看不到它的UI:
一个解决方法是检查searchBar是否在动画中,并在其进入时延迟self.tableView.endUpdates().
func updateSearchResultsForSearchController(searchController: UISearchController){ self.tableView.beginUpdates() //Do some updates if !searchController.searchBar.showsCancelButton{ self.tableView.performSelector(#selector(UITableView.endUpdates),withObject: nil,afterDelay: 1) }else{ self.tableView.endUpdates() } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。