Ответ 1
Может быть, вы можете попробовать это так...
[self.tableView setContentOffset:CGPointMake(0,40)];
У меня есть UITableView с UISearchBar как tableViews.tableHeaderView. Также как новый Mail.app, Notes.app и т.д. В версии 3.0. Я хочу скрыть SearchBar, пока пользователь не перетащит его в поле зрения.
Моя попытка работает только тогда, когда в таблицеView есть пара элементов, так что tableView действительно хочет прокручивать. Я вызываю это в loadView:
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self._tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
Тем не менее кажется, что Apple обрабатывает такой serachbar по-разному. После того, как выложите панель поиска, она больше не ограничивается табличными ячейками (в Notes.app, а не в Mail.app).
Но, возможно, у Apple есть отличный метод для этого нового поведения 3.0, и я просто не могу его найти?
Может быть, вы можете попробовать это так...
[self.tableView setContentOffset:CGPointMake(0,40)];
Работал и на меня. Я использовал следующее:
[self.tableView setContentOffset:CGPointMake(0, self.searchDisplayController.searchBar.frame.size.height) animated:NO];
чтобы запросить высоту строки поиска.
Это дает вам то же поведение, что и iPod.app:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
CGFloat searchBarHeight = CGRectGetHeight([[[self searchDisplayController] searchBar] frame]);
if ([[self tableView] contentOffset].y < searchBarHeight)
[[self tableView] setContentOffset:CGPointMake(0, searchBarHeight)];
}
Это работает для меня.
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.bounces = YES;
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.tableView setContentOffset:CGPointMake(0, 44)];
}
Мне нужно было прокрутить сначала вверх, а затем setContentOffset
до 0
, тогда будет отображаться searchBar:
self.tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: UITableViewScrollPosition.Top, animated: false)
self.tableView.setContentOffset(CGPointMake(0, 0), animated: false)
Мне нравится делать это так:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// Hide the table view header by default.
NSIndexPath *index = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView scrollToRowAtIndexPath:index atScrollPosition:UITableViewScrollPositionTop animated:NO];
}
Таким образом, вам не нужно беспокоиться о том, насколько высок ваш заголовок. Он просто работает!