【iOS系列】-UIWebView加載網頁禁止左右滑動

【iOS系列】-UIWebView加載網頁禁止左右滑動

問題:

作項目時候,用UIWebView加載網頁的時候,要求是和微信網頁中打開的網頁的效果同樣,也便是隻能上下滑動,不能左右滑動,也不能縮放.ios

根據要求把webview.scalesPageToFit = NO;這樣就不能對網頁進行縮放了,git

可是仔細的看加載的網頁,仍是能看清,左右有可以輕微的滑動,效果以下:
github

分析:

網上搜索發現好多人也是有一樣的疑惑,看了一會也沒有解決方案。索性就本身解決了,解決方案以下:web

首先,UIWebView裏面是有ScrollView的,而其能夠縮放,滑動等效果也是由ScrollView的特性。因此設置ScrollView的屬性應該能把問題解決,微信

因此首先設置了contentInset,contentSizeui

webview.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
webview.scrollView.contentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);//這裏webView的frame時充滿屏幕的

發現沒有效果,依然是可以左右移動(很是細微,同上圖)。代理

找到網頁開發人員,他們說已經適配各個屏幕,而後問Android開發人員,發現他們禁止縮放後,左右不能滑動,因此問題應該出在我這裏了。code

解決方案:

咱們去分析,其能左右滑動ScrollView有個代理方法scrollViewDidScroll,在滑動的時候,就會調用,這裏能不能找到解決方案呢。blog

因此我就自定義了一個MyWebView繼承於UIWebView,爲了能拿到scrollView中得scrollViewDidScroll方法,作一些事情。
首先在這個方法中獲得CGPoint point = scrollView.contentOffset;而後打印X方向偏移位置發現是2,既然一滑動就會調用,索性我就在其X值大於0,也即X方向上有偏移的時候就當即給糾正。繼承

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGPoint point = scrollView.contentOffset;
    if (point.x > 0) {
        scrollView.contentOffset = CGPointMake(0, point.y);//這裏不要設置爲CGPointMake(0, 0),這樣咱們在文章下面左右滑動的時候,就跳到文章的起始位置,不科學
    }
}

注:要是不讓網頁縮放,webview.scalesPageToFit = NO;這個也是要加上的。

就此,運行發現問題解決。同理禁止上下滑動也可用一樣的思路解決。


做者:Darren

微博:@IT_攻城師

github:@Darren90

博客:http://www.cnblogs.com/fengtengfei/

歡迎您的訪問...

相關文章
相關標籤/搜索