Положение прокрутки UITableView в Sever Popover - PullRequest
0 голосов
/ 30 января 2020

У меня есть всплывающее окно, подключенное к кнопке в моем приложении для iPad. Всплывающее окно отображает NavigationController со встроенным TableViewController (все настройки с использованием раскадровок). Контроллер табличного представления отображает список закладок с идеей, что пользователь может выбрать одну, всплывающее окно исчезнет, ​​и закладка будет применена. Все это прекрасно работает, однако, когда пользователь открывает поповер, табличное представление всегда прокручивается до самого верха (я предполагаю, что это потому, что контроллер представления создается каждый раз с нуля; есть ли способ изменить это?) , Я хотел бы, чтобы список оставался прокручиваемым до той же позиции, в которой он находился, когда закрывается поповер.

Я прочитал много постов о том, как решить эту проблему, что все в основном состоит из сохранения смещения содержимого (или первого / последнего видимого элемента) в viewWillDisappear, а затем прокрутки табличного представления в viewWillAppear. Когда я это делаю, табличное представление прокручивается, но не в правильную позицию. До сих пор я не смог определить рифму или причину, по которой объем прокручивается в итоге.

Я пытался сначала заставить вид на макет, чтобы правильно установить высоту, прежде чем прокрутка, но это, кажется, не имеет никакого эффекта.

Если я поместил код прокрутки в viewDidAppear, то он прокручивается в правильное место, но пользователь может видеть скачок представления. Для меня это говорит о том, что смещение сохраненного содержимого является правильным, и проблема заключается в попытке установить смещение содержимого до завершения загрузки представления.

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    //This appears to have no effect.
    tableView.setNeedsLayout()
    tableView.layoutIfNeeded()

    tableView.setContentOffset(BookmarksTableViewController.scrollPos, animated: false)
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    //Uncommenting this will cause the view to scroll to the correct position, but after the table view is visible.
    //tableView.setContentOffset(BookmarksTableViewController.scrollPos, animated: false)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    BookmarksTableViewController.scrollPos = tableView.contentOffset
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...