Вопрос

У меня есть UITableView с UISearchBar в качестве tableViews.tableHeaderView .Точно так же, как new Mail.app, Notes.app и т.д.в версии 3.0.Я хочу скрыть панель поиска до тех пор, пока пользователь не перетащит ее в поле своего зрения.

Моя попытка работает только тогда, когда в TableView есть пара элементов, так что 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, Тогда будет видна панель поиска :

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top