有人知道如何阻止UIWebView垂直反弹吗?我的意思是,当用户触摸他们的iphone屏幕,向下拖动他们的手指时,web视图在我加载的网页上方显示一个空白点?

我研究了以下可能的解决方案,但没有一个适合我:

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

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

我如何停止一个UIScrollView水平反弹?


当前回答

下面是一个使用scrollview setBounces函数的通用应用程序示例。这是一个开源项目/示例,位于这里:链接到SimpleWebView(项目Zip和源代码示例)

其他回答

布拉德的方法对我很管用。如果你使用它,你可能想让它更安全一点。

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

如果苹果改变了一些东西,那么反弹就会回来-但至少你的应用程序不会崩溃。

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也是一样。

我遍历UIWebView的子视图集合,并将它们的背景设置为[UIColor blackColor],与网页背景的颜色相同。视图仍然会反弹,但它不会显示丑陋的深灰色背景。

在iOS 5 SDK中,你可以直接访问与web视图相关的滚动视图,而不是遍历它的子视图。

所以要禁用滚动视图中的“反弹”,你可以使用:

myWebView.scrollView.bounces = NO;

请参阅UIWebView类参考。

(但是如果你需要支持5.0之前的SDK版本,你应该听从Mirek Rusin的建议。)

我曾关注过一个名为QuickConnect的项目,该项目可以将web应用程序轻松地创建为iPhone上成熟的可安装应用程序,并找到了一个可行的解决方案,如果你不想让你的屏幕完全可滚动的话,而在我的情况下,我不想让屏幕可滚动。

在上面提到的项目/博客文章中,他们提到了一个javascript函数,你可以添加它来关闭反弹,本质上可以归结为:

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

如果你想了解更多关于他们如何实现它,只需下载QuickConnect并查看....但基本上它所做的就是在页面加载上调用javascript…我试着把它放在我的文档的头部,它似乎工作得很好。