iPhone dev: увеличить скорость прокрутки в UIWebView?

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

5 ответов


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

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

webView.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal;

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

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

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

по умолчанию decelerationRate UIWebView в UIScrollView является 0.989324, а UIScrollViewDecelerationRateFast составляет 0,99, а UIScrollViewDecelerationRateNormal это 0.998.

этот метод не использует частный API.


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

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

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


рассмотрели добавление # теги в HTML на значительные границы?

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

Если вы "ускоряете прокрутку", ваше приложение рискует быть отклоненным за нестандартность, поскольку это может запутать пользователей, которые привыкли к прокрутке webviews со стандартным "ощущением".


старый вопрос, но эти настройки или трюк действительно помогли мне, даже в 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);
}