Подтвердить что ты не робот

Прокрутите UITableView, чтобы заголовок не был виден

У меня есть 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, и я просто не могу его найти?

4b9b3361

Ответ 1

Может быть, вы можете попробовать это так...

[self.tableView setContentOffset:CGPointMake(0,40)];

Ответ 2

Работал и на меня. Я использовал следующее:

[self.tableView setContentOffset:CGPointMake(0, self.searchDisplayController.searchBar.frame.size.height) animated:NO];

чтобы запросить высоту строки поиска.

Ответ 3

Это дает вам то же поведение, что и 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)];
}

Ответ 4

Это работает для меня.

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tableView.bounces = YES;
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    [self.tableView setContentOffset:CGPointMake(0, 44)];
}

Ответ 5

Мне нужно было прокрутить сначала вверх, а затем setContentOffset до 0, тогда будет отображаться searchBar:

self.tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: UITableViewScrollPosition.Top, animated: false)
self.tableView.setContentOffset(CGPointMake(0, 0), animated: false)

Ответ 6

Мне нравится делать это так:

- (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];
}

Таким образом, вам не нужно беспокоиться о том, насколько высок ваш заголовок. Он просто работает!