有人知道如何阻止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水平反弹?


当前回答

在Swift中禁用反弹

webViewObj.scrollView.bounces = false

其他回答

在我看来UIWebView有一个UIScrollView。你可以使用有文档的api来实现这一点,但是反弹是针对两个方向设置的,而不是单独设置的。这在API文档中。 UIScrollView有一个bounce属性,所以像这样工作(不知道是否有多个scrollview):

NSArray *subviews = myWebView.subviews;
NSObject *obj = nil;
int i = 0;
for (; i < subviews.count ; i++)
{
    obj = [subviews objectAtIndex:i];

    if([[obj class] isSubclassOfClass:[UIScrollView class]] == YES)
    {
        ((UIScrollView*)obj).bounces = NO;
    }
}

我很恼火地发现UIWebView不是一个滚动视图,所以我做了一个自定义子类来获得web视图的滚动视图。这个子类包含一个滚动视图,所以你可以自定义你的web视图的行为。这门课的妙语是:

@class CustomWebView : UIWebview
...

- (id) initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
// WebViews are subclass of NSObject and not UIScrollView and therefore don't allow customization.
// However, a UIWebView is a UIScrollViewDelegate, so it must CONTAIN a ScrollView somewhere.
// To use a web view like a scroll view, let's traverse the view hierarchy to find the scroll view inside the web view.
for (UIView* v in self.subviews){
    if ([v isKindOfClass:[UIScrollView class]]){
        _scrollView = (UIScrollView*)v; 
        break;
    }
}
return self;

}

然后,当你创建一个自定义web视图时,你可以禁用反弹:

customWebView.scrollView.bounces = NO; //(or customWebView.scrollView.alwaysBounceVertically = NO)

这是一个伟大的通用方法,使web视图具有自定义滚动行为。这里有几件事需要注意:

as with any view, you'll also need to override -(id)initWithCoder: if you use it in Interface Builder when you initially create a web view, its content size is always the same as the size of the view's frame. After you scroll the web, the content size represents the size of the actual web contents inside the view. To get around this, I did something hacky - calling -setContentOffset:CGPointMake(0,1)animated:YES to force an unnoticeable change that will set the proper content size of the web view.

UIWebView的一个子视图应该是UIScrollView。将scrollEnabled属性设置为NO, web视图将完全禁用滚动。

注意:从技术上讲,这是使用私有API,因此你的应用程序可能会在未来的操作系统版本中被拒绝或崩溃。使用@try和respondsToSelector

在寻找答案的过程中偶然发现了这个,我最终只是在瞎折腾的过程中幸运地找到了自己的答案。我所做的

[[webview scrollView] setBounces:NO];

这招奏效了。

这为我工作,而且很漂亮(我使用phonegap与webView)

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

or

[[webView scrollView] setScrollEnabled:NO];