iPhone dev: увеличить скорость прокрутки в UIWebView? - PullRequest
7 голосов
/ 06 мая 2010

У меня есть приложение, в котором я отображаю локальные файлы HTML в UIWebView. Файлы, однако, иногда бывают большими, и перемещение в нужное место занимает много времени при скорости прокрутки по умолчанию. Есть ли способ повысить скорость вертикальной прокрутки UIWebView?

Ответы [ 5 ]

23 голосов
/ 05 сентября 2012

В iOS 5 мы можем получить доступ к свойству scrollView UIWebView.

Если вы ориентируетесь на iOS 5+, вы можете просто позвонить:

webView.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal;
7 голосов
/ 29 июня 2012

Найдите подпредставление UIWebView, которое является UIScrollView, затем установите для decelerationRate значение UIScrollViewDecelerationRateNormal . Это делает UIWebView столь же быстрым, как и обычный UIScrollView.

В iOS 4/5 мы можем просто использовать последнее подпредставление UIWebView.

UIScrollView *scroll = [webView.subviews lastObject];
if ([scroll isKindOfClass:[UIScrollView class]]) {
    scroll.decelerationRate = UIScrollViewDecelerationRateNormal;
}

Значение по умолчанию decelerationRate для UIScrollView UIWebView равно 0,989324, тогда как UIScrollViewDecelerationRateFast равно 0,99, а UIScrollViewDecelerationRateNormal равно 0,998 * 10,98 *.

Этот метод не использует приватный API.

2 голосов
/ 05 июня 2010

Поиск подпредставления UIWebView, которое отвечает на -setScrollDecelerationFactor: (это UIScroller - частный класс, который является единственным подвидом UIScrollView). Вы обнаружите, что он принимает те же коэффициенты замедления, которые определены для общедоступного класса UIScrollView:

- (void)webViewDidFinishLoad:(UIWebView *)aView {
    id decelerator = [aView viewWithSelector:@selector(setScrollDecelerationFactor:)];
    [decelerator setScrollDecelerationFactor:UIScrollViewDecelerationRateNormal];
}

Обратите внимание, что метод, который я использую viewWithSelector: - это метод, который я определил в категории UIView. Предположительно, если UIWebView изменится в будущем, мой поиск вернет ноль, и этот метод станет неактивным.

0 голосов
/ 29 июля 2018

Старый вопрос, но эти настройки или хитрости действительно помогли мне даже в 2018 году.

Следуйте этим простым приемам кодирования, чтобы улучшить Android WebView Производительность:

WebView mWebView = new WebView(this);
WebSettings settings = mWebView.getSettings();
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(false);
settings.setJavaScriptEnabled(true);
settings.setLoadWithOverviewMode(true);
settings.setUseWideViewPort(true);
mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
mWebView.setScrollbarFadingEnabled(true);
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
settings.setDomStorageEnabled(true);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

    mWebView.setLayerType(View.LAYER_TYPE_HARDWARE, null);

} else {
mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
0 голосов
/ 14 июня 2010

Рассматривали ли вы добавление тегов # в ваш html на значимых границах?

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

Если вы «ускоряете прокрутку», ваше приложение может быть отклонено из-за нестандартности, поскольку это может привести к тому, что пользователи, привыкшие к прокрутке веб-просмотров, будут чувствовать себя стандартно.

...