有人知道如何阻止 UIWebView 垂直弹跳吗?我的意思是当用户触摸他们的 iPhone 屏幕,向下拖动手指时,Webview 会显示一个空白区域,而我已经加载了网页?
我已经查看了以下可能的解决方案,但对我都没有用:
有人知道如何阻止 UIWebView 垂直弹跳吗?我的意思是当用户触摸他们的 iPhone 屏幕,向下拖动手指时,Webview 会显示一个空白区域,而我已经加载了网页?
我已经查看了以下可能的解决方案,但对我都没有用:
for (id subview in webView.subviews)
if ([[subview class] isSubclassOfClass: [UIScrollView class]])
((UIScrollView *)subview).bounces = NO;
看起来运作良好。
也可以被接受到应用商店。
更新:在 iOS 5.x+ 中有一种更简单的方法 - UIWebView
有一个 scrollView
属性,所以你的代码可以像这样:
webView.scrollView.bounces = NO;
WKWebView
同样适用。
UIWebView
添加了一个类别,这样我就可以在任何需要的地方调用[webView setBounces:NO]
。 - zekel[self.webView.scrollView setBounces:NO];
- David Douglas我正在查看一个名为QuickConnect的项目,它使得在iPhone上创建Web应用程序作为完整的可安装应用程序变得容易,并找到了一个解决方案,如果您不希望屏幕可以滚动,那么这个解决方案适合我。
在上述项目/博客文章中,他们提到了一个JavaScript函数,您可以添加该函数以关闭弹跳效果,其本质归结为以下内容:
document.ontouchmove = function(event){
event.preventDefault();
}
我用以下方法实现了这个:
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
}
对我来说运行良好... 此问题的被选答案,如果您在 iPhone 应用程序中使用它,苹果将会拒绝。
UIWebView
的第一个子视图是UIScrollView
,虽然这可能是目前的情况,但在未来(即使是小的)iOS更新或特定配置中,情况很容易发生变化。你应该真正做一个for
迭代来找到UIScrollView
(实际上并不需要太多工作),至少你可以确保得到一个UIScrollView
而不会崩溃你的程序... - Jonathan Ellis因此,要禁用滚动视图中的“弹跳”,您可以使用:
myWebView.scrollView.bounces = NO;
请查看UIWebView类参考文献。(但是如果您需要支持5.0之前的SDK版本,请按照 Mirek Rusin 建议。)
Swift 3
webView.scrollView.bounces = false
警告。我在我的应用中使用了setAllowsRubberBanding:,然后苹果公司拒绝了它,称不允许使用非公共API函数(引用:3.3.1)。
webViewObj.scrollView.bounces = false
Brad的方法对我很有效。如果您使用它,您可能希望让它更加安全。
id scrollView = [yourWebView.subviews objectAtIndex:0]; if( [scrollView respondsToSelector:@selector(setAllowsRubberBanding:)] ) { [scrollView performSelector:@selector(setAllowsRubberBanding:) withObject:NO]; }
如果苹果公司做了一些改变,那么弹跳效果将会回来 - 但至少您的应用程序不会崩溃。
仅在iOS5上,如果您计划让用户缩放Web视图内容(例如:双击),则弹跳设置是不够的。您还需要将alwaysBounceHorizontal和alwaysBounceVertical属性设置为NO,否则当他们缩小到默认大小时(另一个双击...),它会再次弹跳。