如何在UIWebview中启用水平滚动并禁用垂直滚动?

时间:2012-04-11 02:36:27

标签: iphone uiwebview uiscrollview

我的UIWebView不允许垂直滚动。但是,应该可以进行水平滚动。

我一直在浏览文档,但找不到任何提示。

以下代码禁用了两个滚动方向,但我只想禁用垂直:

myWebView.scrollView.scrollEnabled = NO;

如何解决这个问题?

5 个答案:

答案 0 :(得分:33)

启用水平滚动并禁用垂直滚动:

myWebView.scrollView.delegate = self;
[myWebView.scrollView setShowsVerticalScrollIndicator:NO];

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.y > 0  ||  scrollView.contentOffset.y < 0 )
        scrollView.contentOffset = CGPointMake(scrollView.contentOffset.x, 0);
}

第二行会隐藏垂直滚动指示。检查“scrollView.contentOffset.y&lt; zero”是否会在您尝试向下滚动时禁用弹跳。你也可以这样做:scrollView.bounces = NO做同样的事!! 通过查看Rama Rao的答案,我可以看出他的代码会在您尝试垂直滚动时将scrollView重置为(0.0),从而使您远离水平位置,这是不好的。

启用垂直滚动并禁用水平滚动:

myWebView.scrollView.delegate = self;
[myWebview.scrollView setShowsHorizontalScrollIndicator:NO];

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.x > 0)
        scrollView.contentOffset = CGPointMake(0, scrollView.contentOffset.y);
}

和平

答案 1 :(得分:4)

为了使其全面运作,请写下:

 webview.scrollView.delegate = self;
    [webview.scrollView setShowsHorizontalScrollIndicator:NO];

}

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.x > 0)
        scrollView.contentOffset = CGPointMake(0, scrollView.contentOffset.y);
    if (scrollView.contentOffset.x < 0)
        scrollView.contentOffset = CGPointMake(0, scrollView.contentOffset.y);
}

我刚刚添加了最后两行,因为当你像pnizzle那样编写它时,你不能从右边滚动到左边,但仍然是从左边滚动到右边。

祝你好运

答案 2 :(得分:3)

-(void) scrollViewDidScroll:(UIScrollView *)scrollView{
    if (scrollView.contentOffset.y>web.frame.origin.x) {
        scrollView.contentOffset = CGPointMake(0, 0);
    }
}

通过这种方式我们可以解决问题。获取全局scrollview对象,如下所示:

UIScrollView* scrollView =web.scrollView;

将委托设置为滚动视图,然后将调用-(void) scrollViewDidScroll:(UIScrollView *)scrollView,您可以获得结果。我在两个版本(iOS 5和iOS 4.2)中检查了它

答案 3 :(得分:1)

保留scrollEnabled == YES。滚动视图将根据内容大小限制滚动。要仅允许水平滚动,请将contentSize设置为:

scrollView.contentSize = CGSizeMake(1000, scrollView.bounds.size.height);

宽度应该与滚动视图中滚动的内容的宽度相关。

答案 4 :(得分:0)

斯威夫特 4.2:

启用水平滚动和禁用垂直滚动:

webview.scrollView.delegate = self
webView.scrollView.showsHorizontalScrollIndicator = false

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView.contentOffset.y > 0  ||  scrollView.contentOffset.y < 0{
        scrollView.contentOffset = CGPoint(x: scrollView.contentOffset.x, y:0)
    }
}

启用垂直滚动并禁用水平滚动:

webview.scrollView.delegate = self
webView.scrollView.showsHorizontalScrollIndicator = false

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView.contentOffset.x > 0 {
        scrollView.contentOffset = CGPoint(x: 0, y:scrollView.contentOffset.y)
    }
}