scrollsToTop не работает, когда UIWebView используется с pushViewController, в поисках решения - PullRequest
1 голос
/ 27 ноября 2009

У меня есть приложение с табличным представлением в корне в контроллере навигации, и при выборе ячейки таблицы оно отображает новый контроллер представления, который содержит только UIWebView (с панелью инструментов и панелью навигации).

В зависимости от того, как я представляю новый веб-вид, функция, с помощью которой пользователь может нажать на строку состояния вверху и прокрутить веб-просмотр вверх, либо работает, либо не работает.

Если я использую:

  • (void) presentModalViewController: (UIViewController *) modalViewController animated: (BOOL) animated

в RootView, затем веб-просмотр прокручивается до самого верха.

Если я изменю эту строку кода и вместо этого использую:

  • (void) pushViewController: (UIViewController *) viewController animated: (BOOL) animated

на контроллере навигации, затем функция scrollsToTop перестает работать.

Однако я действительно хочу использовать, по другим причинам в контексте приложения, метод pushViewController. НО, я также хочу сохранить поведение scrollsToTop.

До сих пор я пробовал различные подходы, некоторые из которых описаны здесь:

-Попытка установить внутреннее свойство scrolllsToTop для веб-просмотра scrolllsToTop

((UIScrollView *)[[webView valueForKey:@"_internal"] valueForKey:@"scroller"]).scrollsToTop = YES;

(Без заметного эффекта).

-Изменяется порядок установки свойств NavBar или не устанавливается вообще -Добавление дополнительных вызовов "window makeKeyAndOrderFront" после нажатия нового представления.

Я не верю, что есть другие представления, которые могут требовать свойство "scrollsToTop" (и первый тест выше подтверждает это в любом случае).

Если не пытаться встроить UIWebView в UIScrollView, что, как я ожидаю, будет болезненным, у меня закончились маршруты для решения этой проблемы.

Я надеюсь, что кто-то еще нашел способ исправить это?

Ответы [ 2 ]

1 голос
/ 07 декабря 2009

Попробуйте обратный подход в качестве обходного пути.

В контроллере корневого представления:

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    self.tableView.scrollsToTop = NO;
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.tableView.scrollsToTop = YES;
}

Bye!

0 голосов
/ 28 января 2010

Оказывается, это не сработало из-за того, как я настраивал Navbar. Я переопределял leftBarButtonItem с UIBarButtonItem, который затем занимал всю панель навигации (я думаю, что я использовал этот подход из кода Apple много месяцев назад, но не уверен). Я использовал тот же подход в другом представлении, и scrollsToTop там работал нормально.

Удаление этого кода и помещение пользовательского представления Navbar в (например) self.navigationController.titleView вместо этого решило эту проблему. Я действительно не знаю, почему, как я уже сказал, это прекрасно работает для других представлений.

Я потратил много времени на эту проблему, поэтому я надеюсь сэкономить кому-то еще немного, описав ее здесь:)

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