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


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

問題:

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

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

但是仔細的看加載的網頁,還是能看清,左右有能夠輕微的滑動,效果如下:

分析:

網上搜索發現好多人也是有同樣的疑惑,看了一會也沒有解決方案。索性就自己解決了,解決方案如下:

首先,UIWebView里面是有ScrollView的,而其可以縮放,滑動等效果也是由ScrollView的特性。所以設置ScrollView的屬性應該能把問題解決,

所以首先設置了contentInset,contentSize

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開發人員,發現他們禁止縮放后,左右不能滑動,所以問題應該出在我這里了。

解決方案:

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

所以我就自定義了一個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/

歡迎您的訪問...



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM