zoukankan      html  css  js  c++  java
  • 【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/

    欢迎您的访问...


  • 相关阅读:
    浅谈P2P、P2C 、O2O 、B2C、B2B、 C2C的区别
    用CornerStone配置SVN,HTTP及svn简单使用说明
    Nginx之让用户通过用户名密码认证访问web站点
    linux下php redis扩展安装
    mac下用户用户组命令行操作
    linux下MySQL安装及设置(二)
    linux下MySQL安装及设置
    linux下php的一些问题
    计算多个文档之间的文本相似程度
    提取图像兴趣点
  • 原文地址:https://www.cnblogs.com/fengtengfei/p/4489247.html
Copyright © 2011-2022 走看看