我有一个UISearchDisplayController,它在tableview中显示结果.当我尝试滚动tableview时,contentsize正好是_keyboardHeight比它应该更高.这导致错误的底部偏移.有> tableview中有50个项目,因此下面不应该有空格
解决方法
我通过添加NSNotificationCenter侦听器解决了这个问题
- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView { //this is to handle strange tableview scroll offsets when scrolling the search results [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil]; }
别忘了删除监听器
- (void)searchDisplayController:(UISearchDisplayController *)controller willHideSearchResultsTableView:(UITableView *)tableView { [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil]; }
- (void)keyboardDidHide:(NSNotification *)notification { if (!self.searchDisplayController.active) { return; } NSDictionary *info = [notification userInfo]; NSValue *avalue = [info objectForKey:UIKeyboardFrameEndUserInfoKey]; CGSize KeyboardSize = [avalue CGRectValue].size; CGFloat _keyboardHeight; UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; if (UIDeviceOrientationIsLandscape(orientation)) { _keyboardHeight = KeyboardSize.width; } else { _keyboardHeight = KeyboardSize.height; } UITableView *tv = self.searchDisplayController.searchResultsTableView; CGSize s = tv.contentSize; s.height -= _keyboardHeight; tv.contentSize = s; }