允许在UIWebView上禁用滚动?

时间:2011-06-22 09:46:33

标签: ios scroll uiwebview

我必须在文章下面显示一篇带有UITableView的网络文章。

我找到的唯一选项是在tableView标题的UIWebView中显示该文章。

为了做到这一点,我必须获得webView内容的高度,我必须禁用webView的滚动。

我找到了两种禁用滚动的解决方案:

for (id subview in webView.subviews)
    if ([[subview class] isSubclassOfClass: [UIScrollView class]])
        ((UIScrollView *)subview).scrollEnabled=NO;

或在JavaScript中:

<script type="text/javascript">
touchMove = function(event) {
    event.preventDefault();
}

我听说Apple禁止第一个解决方案,但我没有任何证据。 使用此解决方案会拒绝我的申请吗?如果是这样,我可以使用第二种解决方案而不被拒绝吗?

18 个答案:

答案 0 :(得分:293)

从iOS5开始,我们可以直接访问UIWebView的滚动视图。
你可以像这样禁用滚动和反弹:

webView.scrollView.scrollEnabled = NO; 
webView.scrollView.bounces = NO;

答案 1 :(得分:25)

由于这个问题仍然适用,有一种新方法可以做到! (iOS 7.0+,也许iOS 6也未确认)

webView.scrollView.scrollEnabled = NO;

小心:)

答案 2 :(得分:20)

您可以简单地将Web视图用户交互属性设置为no ie。

webView.userInteractionEnabled = NO;

非常简单,工作正常,谢谢:)

答案 3 :(得分:12)

对于所有ios版本,您可以使用此代码而不是setScrollEnabled:

for (UIView *view in webview.subviews) {
    if ([view isKindOfClass:[UIScrollView class]]) {
       UIScrollView *scrollView = (UIScrollView *)view;
       scrollView.scrollEnabled = NO;
    }
}

答案 4 :(得分:11)

使用此<body ontouchmove="event.preventDefault()">

答案 5 :(得分:8)

SWIFT 3版

sudo bash -c 'cat <<EOT >>/etc/apache2/sites-available/eco.conf
<VirtualHost *:80>
    ServerName eco.vagrant
    DocumentRoot /var/www/eco/website/public    

    <Directory var/www/eco/website/public/>
        Options FollowSymLinks
        AllowOverride All
    </Directory>   

    # Logging
    ErrorLog /var/log/apache2/eco-error.log
    LogLevel notice
    CustomLog /var/log/apache2/eco-access.log combined
</VirtualHost>
EOT
'

答案 6 :(得分:7)

我认为Javascript

<script type="text/javascript">
touchMove = function(event) {
event.preventDefault();
}

是最好的解决方案。

确实:

您的第一次考试,或

[[[WebView subviews] lastObject] setScrollingEnabled:NO];

一个(同样的事情)可能被拒绝,因为没有记录,或者让你的应用程序在进一步的ios更新中崩溃。

[[myWebView scrollView] setBounces:NO];

方法不适用于iOS&lt; 5。

答案 7 :(得分:5)

第一个被Apple拒绝。今天早上发生在我身上。

答案 8 :(得分:5)

[[myWebView scrollView] setBounces:NO];

答案 9 :(得分:5)

[[[WebView subviews] lastObject] setScrollingEnabled:NO];

为我排序

答案 10 :(得分:4)

我不认为Apple会禁止第一个选项。

你可以尝试

[[[Webview subviews] lastObject] setScrollingEnabled:NO];

如果您不想在UIWebView中使用任何链接,您也可以

[myWebView setUserInteractionEnabled:NO];

答案 11 :(得分:4)

使用它:

[[webView scrollView] setBounces:NO];
[[webView scrollView] setScrollingEnabled:NO];

答案 12 :(得分:3)

试试这个,

[(UIScrollView *)[[webView subviews] lastObject] setScrollEnabled:NO];    

答案 13 :(得分:3)

在您的HTML(<HEAD>标记)

中尝试此操作
<script> 
  document.ontouchmove = function(event) { event.preventDefault(); }
</script>

它将禁用您网页上的滚动。

(适用于任何网页,不仅适用于UIWebView)

答案 14 :(得分:3)

我在UIWebView内放置了一些UIScrollView,除非我在网页视图上禁用用户互动(即使使用[[webview scrollview] setScrollEnabled:NO]),否则它不会向我滚动。所以我将UIWebView放在UIView里面,这对我有用,但我{h}内的UIWebView内的交互式链接或div不再有用了。

对我有用的唯一方法是将UIWebView保留在UIScrollView内,以便HTML互动有效,但UIScrolling则不然。

然后,我为webview创建了一个自定义委托,以侦听从Webview中包含的HTML调用的window.open("http:/customEvent")。我还添加了一个JavaScript刷卡检测,它将启动我的自定义事件。

当webview委托收到此消息时,我会将通知传递给控制器​​,然后控制器动态滚动UIScrollView。显然,我必须构建一个逻辑来监视和滚动到下一页或上一页。不是最漂亮的解决方案,但它为我工作。

答案 15 :(得分:2)

我需要禁用滚动,因为解雇自定义键盘实际上搞乱了使用webView滚动。没有其他工作,我采取了这样的事情:

-(void)viewDidLoad{
  [super viewDidLoad];
  [self.webView.scrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil];
  self.webView.scrollView.showsVerticalScrollIndicator = NO;
}  

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
    if (!CGPointEqualToPoint(self.webView.scrollView.contentOffset, CGPointZero)){
        self.contentOffset = CGPointZero;
    }
}

答案 16 :(得分:1)

[[[WebView subviews] lastObject] setScrollingEnabled:NO];

答案 17 :(得分:1)

是UIScrollview上的UIWebview和UITableView,并设置webview的高度(并添加到Scrollview的总ContentSize),就像你想要的那样?