Остановить UIWebView от "подпрыгивания" по вертикали? - PullRequest
222 голосов
/ 01 февраля 2009

Кто-нибудь знает, как остановить вертикальный отскок UIWebView? Я имею в виду, когда пользователь касается экрана своего iphone, тянет его пальцем вниз, и веб-просмотр показывает пустое место над загруженной веб-страницей?

Я рассмотрел следующие возможные решения, но ни одно из них не помогло мне:

http://www.iphonedevsdk.com/forum/iphone-sdk-development/996-turn-off-scrolling-bounces-uiwebview.html

http://forums.macrumors.com/showthread.php?t=619534

Как я могу остановить горизонтальный отскок UIScrollView?

Ответы [ 22 ]

417 голосов
/ 24 июля 2010
for (id subview in webView.subviews)
  if ([[subview class] isSubclassOfClass: [UIScrollView class]])
    ((UIScrollView *)subview).bounces = NO;

... вроде нормально работает.

Он также будет принят в App Store.

Обновление : в iOS 5.x + есть более простой способ - UIWebView имеет свойство scrollView, поэтому ваш код может выглядеть следующим образом:

webView.scrollView.bounces = NO;

То же самое относится к WKWebView.

46 голосов
/ 09 февраля 2009

Я рассматривал проект, который облегчает создание веб-приложений в виде полноценных устанавливаемых приложений на iPhone под названием QuickConnect , и нашел решение, которое работает, если вы не хотите, чтобы ваш экран быть прокручиваемым вообще, что в моем случае я не сделал.

В вышеупомянутом сообщении о проекте / блоге они упоминают функцию javascript, которую можно добавить, чтобы отключить подпрыгивание, что по сути сводится к следующему:

    document.ontouchmove = function(event){
        event.preventDefault();
    }

Если вы хотите узнать больше о том, как они реализуют его, просто скачайте QuickConnect и проверьте его .... Но в основном все, что он делает, это вызывает этот javascript при загрузке страницы ... Я попытался просто поставить его в голову мой документ, и, кажется, работает нормально.

18 голосов
/ 22 августа 2010

Ну, все, что я сделал для достижения этой цели:

UIView *firstView = [webView.subviews firstObject];

if ([firstView isKindOfClass:[UIScrollView class]]) {

    UIScrollView *scroll = (UIScrollView*)firstView;
   [scroll setScrollEnabled:NO];  //to stop scrolling completely
   [scroll setBounces:NO]; //to stop bouncing 

}

У меня отлично работает ... Кроме того, ответ на этот вопрос отмечен галочкой, который Apple отклонит, если вы используете его в ваше приложение для iphone.

17 голосов
/ 29 декабря 2011

В iOS 5 SDK вы можете получить доступ к представлению прокрутки, связанному с веб-представлением, напрямую, а не просматривать его подпредставления.

Таким образом, чтобы отключить «подпрыгивание» в представлении прокрутки, вы можете использовать:

myWebView.scrollView.bounces = NO;

См. описание класса UIWebView .

(Однако, если вам требуется поддержка версий SDK до 5.0, вам следует следовать совету Мирека Русина .)

10 голосов
/ 16 ноября 2016

Свифт 3

webView.scrollView.bounces = false
9 голосов
/ 16 ноября 2009

Внимание. Я использовал setAllowsRubberBanding: в моем приложении Apple отклонила его, заявив, что непубличные функции API недопустимы (укажите: 3.3.1)

4 голосов
/ 01 сентября 2016

В Swift отключить отскоки

webViewObj.scrollView.bounces = false
3 голосов
/ 18 июля 2009

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

id scrollView = [yourWebView.subviews objectAtIndex:0];
if( [scrollView respondsToSelector:@selector(setAllowsRubberBanding:)] )
{
    [scrollView performSelector:@selector(setAllowsRubberBanding:) withObject:NO];
}

Если яблоко что-то изменит, отскок вернется, но по крайней мере ваше приложение не рухнет.

3 голосов
/ 12 октября 2011

На iOS5, только если вы планируете позволить пользователям увеличивать содержимое веб-просмотра (например, двойное касание), настройки отказов недостаточно. Вам также необходимо установить для свойств AlwaysBounceHorizontally и alwaysBounceVertical значение NO, иначе при уменьшении (еще одно двойное нажатие ...) по умолчанию оно снова отскочит.

2 голосов
/ 21 августа 2013

Это сработало для меня и прекрасно (я использую телефонный разрыв с webView)

[[webView.webView scrollView] setScrollEnabled:NO];

или

[[webView scrollView] setScrollEnabled:NO];
...