Как сделать прокрутку UIWebView вверху?

Есть ли способ сделать прокрутку UIWebView вверху, когда я коснусь, скажу UISearchView в том же viewController (без использования Javascript).

Что-то вроде этого:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
      [myWebView scrollToTop];    //pseudocode 

}

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

Ответы

Ответ 1

Если вы не хотите использовать JavaScript, для этого не существует общедоступного метода API. UIWebViews не наследуются от представлений прокрутки, поэтому вы не можете использовать какие-либо обычные методы. Как вы поняли, это возможно сделать с JavaScript. Вы можете попытаться найти фактическое представление прокрутки в UIWebView, но все это недокументировано и не очень хорошо делать в производственном приложении.

Обновить - с iOS 5 теперь вы можете получить прямой доступ к веб-просмотру UIScrollView - см. ответ Reconquistador для получения дополнительной информации.

Ответ 2

CGPoint top = CGPointMake(0, 0); // can also use CGPointZero here
[myWebView.scrollView setContentOffset:top animated:YES];

(Обратите внимание, что если вы установили myWebView.scrollView.contentInset.top, вам нужно принять это во внимание, а не просто прокручивать до CGPointZero.)

Ответ 3

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

for (UIView *subview in webView.subviews)
{
    if ([subview isKindOfClass:[UIScrollView class]])
        [(UIScrollView*)subview setContentOffset:CGPointZero animated:YES];
}

Ответ 4

Прокрутите UIWebView, вызвав JavaScript через Objective-C:

NSString *script = @"scrollTo(0, 0)";
[webView stringByEvaluatingJavaScriptFromString:script];

Для плавной прокрутки используйте библиотеку jQuery:

NSString *script = @"$('html, body').animate({scrollTop:0}, 'slow')";
[webView stringByEvaluatingJavaScriptFromString:script];

Ответ 5

Откройте UIWebView scrollview и установите YES в метод scrollsToTop;

WebView.scrollView.scrollsToTop = YES;

Надеюсь, это поможет!

Ответ 6

Я не верю, что вы найдете какой-либо официально поддерживаемый метод, чтобы делать то, что вы хотите.

Ответ 7

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

CGPoint topOffset = CGPointMake(0, 0);
//[scrollView setContentOffset: topOffset animated: YES];
[[[webView subviews] lastObject] setContentOffset:topOffset animated:YES];

Если webView является подклассом UIWebView, конечно.

Ответ 8

почему бы просто не коснуться строки состояния вашего устройства. для всех элементов управления на основе scrollView, tableView, webView, scrollView, есть: Жест по прокрутке вверх - это щелчок по строке состояния; когда это свойство равно YES, просмотр прокрутки переходит в верхнюю часть содержимого, когда этот жест происходит. Значением по умолчанию этого свойства является YES.

Ответ 9

Swift 3.x

webView.scrollView.setContentOffset(CGPoint.zero, animated: true)

Ответ 10

Отображая PDF файл в UIWebView, я обнаружил, что вы можете перейти к вершине просто перезагрузив документ.