【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/
欢迎您的访问...