У меня есть UISearchDisplayController, и он отображает результаты в виде таблицы. Когда я пытаюсь прокрутить таблицу, размер содержимого ровно на _keyboardHeight выше, чем должен быть. Это приводит к ложному смещению дна. В табличном представлении> 50 элементов, поэтому не должно быть пустого места, как показано ниже.
Смещение содержимого таблицы UISearchDisplayController неверно после скрытия клавиатуры
Ответы (2)
Я решил это, добавив прослушиватель 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;
}
person
Zayin Krige
schedule
03.10.2013
Этот ответ похож, но немного короче;)
- person Hlung; 29.10.2013
Вот более простой и удобный способ сделать это на основе опубликованной ссылки Hlung:
- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView {
[tableView setContentInset:UIEdgeInsetsZero];
[tableView setScrollIndicatorInsets:UIEdgeInsetsZero];
}
Примечание. В исходном ответе используется NSNotificationCenter для получения тех же результатов.
person
c0deslayer
schedule
30.07.2014