【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/

欢迎您的访问...


原文地址:https://www.cnblogs.com/fengtengfei/p/4489247.html