允许在 UIWebView 上禁用滚动条吗?

我必须显示一个网络文章与 UITableView下的文章。

我找到的唯一选择是在 tableView 标头的 UIWebView中显示文章。

为了做到这一点,我必须得到的高度的 webView 内容,我必须禁用滚动的 webView。

我找到了两个禁用滚动的解决方案:

for (id subview in webView.subviews)
if ([[subview class] isSubclassOfClass: [UIScrollView class]])
((UIScrollView *)subview).scrollEnabled=NO;

或使用 JavaScript:

<script type="text/javascript">
touchMove = function(event) {
event.preventDefault();
}

我听说第一个解决方案是被苹果禁止的,但我没有任何证据。 我的申请会否因使用此解决方案而被拒绝? 如果会,我可否使用第二个解决方案而不被拒绝?

93248 次浏览
[[[WebView subviews] lastObject] setScrollingEnabled:NO];

that sorted it for me

Is a UIWebview and a UITableView on a UIScrollview, and setting the height of the webview (and adding to the total ContentSize of the Scrollview) like what you want?

I don't think the first option is forbidden by Apple.

You could try

[[[Webview subviews] lastObject] setScrollingEnabled:NO];

If you don't want any links to work in your UIWebView, you can also do

[myWebView setUserInteractionEnabled:NO];

The first is rejected by Apple. It happened to me just this morning.

[[myWebView scrollView] setBounces:NO];

[[[WebView subviews] lastObject] setScrollingEnabled:NO];

Starting with iOS5 we have direct access to the scrollview of the UIWebView.
You can disable scrolling and bounces like this:

webView.scrollView.scrollEnabled = NO;
webView.scrollView.bounces = NO;

You can simply set the web view user interaction property to no i.e.

webView.userInteractionEnabled = NO;

Its pretty simple and works fine,thanks :)

I think the Javascript

<script type="text/javascript">
touchMove = function(event) {
event.preventDefault();
}

is far the best solution.

Indeed :

Your first examle, or the

[[[WebView subviews] lastObject] setScrollingEnabled:NO];

one (same things) could be rejected because not documented, or make you app crash in a further ios update.

And the

[[myWebView scrollView] setBounces:NO];

method won't work with iOS < 5.

Try this,

[(UIScrollView *)[[webView subviews] lastObject] setScrollEnabled:NO];

I placed some UIWebViews inside a UIScrollView and it wasn't scrolling for me, unless I disable the user interaction on the webviews (even with the [[webview scrollview] setScrollEnabled:NO]). So I placed the UIWebViews inside a UIView and that worked for me but then the interactive links or divs in my HTML inside the UIWebView were not working anymore.

The only thing that worked for me is to keep the UIWebView inside the UIScrollView so the HTML interactions work but the UIScrolling does not.

I then created a custom delegate for the webviews to listen for window.open("http:/customEvent") that is called from the HTML contained in the webview. I also added a JavaScript swipe detection that will fire up my custom event.

When the webview delegate receives this, I pass a notification to a controller which then dynamically scrolls my UIScrollView. Obviously I had to build a logic to monitor and scroll to the next or previous page. Not the prettiest solution but It's working for me.

for all ios versions you can use this code instead of setScrollEnabled :

for (UIView *view in webview.subviews) {
if ([view isKindOfClass:[UIScrollView class]]) {
UIScrollView *scrollView = (UIScrollView *)view;
scrollView.scrollEnabled = NO;
}
}

Use this one <body ontouchmove="event.preventDefault()">

Since this question is still applicable, there is a new way to do it! (iOS 7.0+, perhaps iOS 6 also, not confirmed)

webView.scrollView.scrollEnabled = NO;

Take care :)

Use it :

[[webView scrollView] setBounces:NO];
[[webView scrollView] setScrollingEnabled:NO];

Try this in your HTML (<HEAD> tag)

<script>
document.ontouchmove = function(event) { event.preventDefault(); }
</script>

It will disable scrolling on your web page.

(works on any webpage, not just UIWebView)

I needed to disable scrolling because dismissing a custom keyboard really messed up scrolling with the webView. Nothing else worked and I resorted to something like this:

-(void)viewDidLoad{
[super viewDidLoad];
[self.webView.scrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil];
self.webView.scrollView.showsVerticalScrollIndicator = NO;
}


-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
if (!CGPointEqualToPoint(self.webView.scrollView.contentOffset, CGPointZero)){
self.contentOffset = CGPointZero;
}
}

SWIFT 3 version

    webView.scrollView.bounces = false
webView.scrollView.isScrollEnabled = false