akaii
akaii

Reputation: 141

How to disable UIWebview horizontal scrolling?

I've tried disabling it by inserting:

<meta name="viewport" content="width=320" />

into my HTML string, and a dozen variations of the above in the vain hope that I just screwed up the tag syntax... but nothing seems to stop UIWebView from scrolling horizontally. And yet there are apps that manage to do this (like MobileRSS), and presumably, since they haven't gotten rejected, they're not using private APIs.

Upvotes: 14

Views: 29655

Answers (7)

Argus
Argus

Reputation: 2339

Swift 5.0 solution:

func webViewDidFinishLoad(_ webView: UIWebView) {
    webView.scrollView.contentSize = CGSize(width: webView.frame.size.width, height: webView.scrollView.contentSize.height)        
}

Upvotes: 0

damithH
damithH

Reputation: 5178

if the webView content a word which has length greater than the webView. you have to break that string. so use the below code in the div

word-wrap: break-word;

Upvotes: 4

Ivan Bruel
Ivan Bruel

Reputation: 386

Set the delegate for the UIWebview's UIScrollview (on iOS5 by webview.scrollView and on iOS4 by traversing the subview tree and selecting the UIScrollview subview) to 'self' and use the following code:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    [scrollView setContentOffset:CGPointMake(0, scrollView.contentOffset.y)];
}

Works perfectly, for some reason my HTML code was overflowing horizontally without any need for it. This fix it.

Upvotes: 1

Denis Kutlubaev
Denis Kutlubaev

Reputation: 16204

My version, a common solution:

- (void)webViewDidFinishLoad:(UIWebView *)webView {

[webView.scrollView setContentSize: CGSizeMake(webView.frame.size.width, webView.scrollView.contentSize.height)];

}

Upvotes: 32

Vineel Shah
Vineel Shah

Reputation: 1058

Your web page needs to have two attributes: 1 -- the viewport meta tag and 2-- a width of 320px or less, including margin and padding.

Here's a very bare HTML5 skeleton that should allow vertical scrolling and disallow horizontal scrolling, including disallowing horizontal bouncing. This also disallows zooming -- it assumes that your web page should always be shown 1-1 to the user. This is useful if you're using an UIWebView to show a user interface.

<!doctype html>
<html>
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=0" />
    <style>
        body {width:320px;margin:0;padding:0;}
    </style>
</head>
<body></body>
</html>

Upvotes: 4

akaii
akaii

Reputation: 477

I eventually managed to solve this. I'd already tried setting the viewport width value, and it didn't work. What DID work was using overflow:hidden in conjunction with setting the viewport width. Thanks for answering anyhow.

Upvotes: 8

Amy Worrall
Amy Worrall

Reputation: 16337

<meta name="viewport" content="width=device-width, user-scalable=no initial-scale=1.0" />

Upvotes: 1

Related Questions