У меня есть панель поиска (с scopeBar), где я хочу закрыть клавиатуру, когда сервер возвращает соответствующие результаты. У меня есть следующий код:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
[search resignFirstResponder];
//height - navBar - searchBar - carrierBar - uitabbar
CGRect newFrame = CGRectMake(0, 44, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height-44-44-20-49);
homeTable.frame = newFrame;
}
и
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
//[self.navigationController setNavigationBarHidden:YES animated:YES];
searchBar.scopeButtonTitles = kScopeButtonTitles;
searchBar.showsScopeBar = YES;
[searchBar sizeToFit];
[searchBar setShowsCancelButton:YES animated:YES];
//resize the table for the scope bar
//uitabbar height is 49
//uinavigationbar is 44
//uisearchbar and scope is 44 each
//UIkeyboard is 216
//UITabBar is covered by UIKeyboard, so it doesn't have to be subtracted.
//carrier status bar is 20
CGRect newFrame = CGRectMake(0, 88, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height-44-88-216-20);
homeTable.frame = newFrame;
}
Когда сервер возвращает данные, я звоню
[homeTable reloadData];
, после чего мой - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
называется - в 10 раз точнее.
Прокрутка стола приведет к смещению клавиатуры, но я заметил, что все высоты перепутаны. В отладчике я заметил, что
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
использует свежую ячейку, отличную от той, которая используется в heightForRowAtIndexPath
каждый раз.
Это ошибка?
Я замечаю, что если я не вызову метод scrollViewWillBeginDragging
, высота uitableviewcell будет хорошей, даже после перезагрузки таблицы.
Спасибо заранее.