作项目时候,用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/
欢迎您的访问...