【问题标题】:Disable Scroll on a UIWebView allowed?允许在 UIWebView 上禁用滚动?
【发布时间】:2011-06-22 09:46:32
【问题描述】:

我必须在文章下方显示带有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 禁止,但我没有任何证据。 使用此解决方案会拒绝我的申请吗?如果是这样,我可以使用第二种解决方案而不会被拒绝吗?

【问题讨论】:

    标签: ios scroll uiwebview


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢,这正是我想要的。 @jsddour,您应该将此答案标记为已接受!
    • 出于某种原因,这对我不起作用。 :-( 我已经放了一个 ScrollView 并在其中放了一个 UIWebView。然后在 viewWillAppear 方法中设置上面的 2 行。但是滚动仍然在 web 视图中工作。有人可以帮忙吗??仅供参考,我正在运行它iOS 7 模拟器。
    • webView.scrollView.bounces = NO;有什么用?因为第一行的代码禁用了滚动。
    • 喜欢人们在不花时间给贡献者投赞成票的情况下回答并运行。有没有办法通知用户请选择答案投票?
    • for swift webView.scrollView.scrollEnabled = false / webView.scrollView.bounces = false
    【解决方案2】:

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

    webView.scrollView.scrollEnabled = NO;
    

    保重:)

    【讨论】:

    • 我不明白为什么这不在 IB 中:/,cmon APPLE 你在做什么!非常好的解决方案!
    【解决方案3】:

    您可以简单地将 web 视图用户交互属性设置为 no,即

    webView.userInteractionEnabled = NO;
    

    它非常简单并且工作正常,谢谢:)

    【讨论】:

    • 但是,这可以防止链接被点击。
    • @GrahamPerks 我已根据您的评论编辑了答案,请查看并批准,谢谢 :)
    【解决方案4】:

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

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

    【讨论】:

    • 首先,我尝试了“setScrollEnabled”方法,但苹果拒绝了我的 ipa。然后我改变了这个方法并接受了。
    【解决方案5】:

    使用这个&lt;body ontouchmove="event.preventDefault()"&gt;

    【讨论】:

      【解决方案6】:

      SWIFT 3 版本

          webView.scrollView.bounces = false
          webView.scrollView.isScrollEnabled = false
      

      【讨论】:

        【解决方案7】:

        我认为是 Javascript

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

        是最好的解决方案。

        确实:

        你的第一个考试,或

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

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

        还有

        [[myWebView scrollView] setBounces:NO];
        

        该方法不适用于 iOS

        【讨论】:

          【解决方案8】:
          [[[WebView subviews] lastObject] setScrollingEnabled:NO];
          

          为我整理好了

          【讨论】:

          • 依赖它是错误的,因为它不是暴露的 API。
          • [[[WebView subviews] lastObject] setScrollingEnabled:NO];为我排序。无论如何,它没有回答我的问题。我的问题是我可以这样做吗?似乎禁止通过 SDK 滚动。但我不确定。以及如何禁用通过 javascript 滚动。
          • 没有证据表明我的建议会导致苹果拒绝,事实上,通过调用 subviews 数组中的最后一个 subiew 并针对它设置 scrollingEnabled 是公开的 API?一定?。是的,因为你可以使用它。虽然不知道通过javascript。对不起。
          • 不,你不应该这样做。正如 Deepak 所说,您不能依赖 Apple 的 UI 元素之一中未记录的子视图内部顺序。如果他们在未来的操作系统更新中更改内部结构,您的应用程序将会崩溃。他们特别警告在多个地方这样做,许多应用程序在升级到 iPhone OS 3.0 时就因为他们这样做了。
          【解决方案9】:

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

          【讨论】:

            【解决方案10】:

            [[myWebView scrollView] setBounces:NO];

            【讨论】:

              【解决方案11】:

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

              你可以试试

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

              如果您不希望任何链接在您的 UIWebView 中起作用,您也可以这样做

              [myWebView setUserInteractionEnabled:NO];
              

              【讨论】:

                【解决方案12】:

                使用它:

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

                【讨论】:

                  【解决方案13】:

                  试试这个,

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

                  【讨论】:

                    【解决方案14】:

                    我在UIScrollView 中放置了一些UIWebViews,但它并没有滚动,除非我禁用了webviews 上的用户交互(即使使用[[webview scrollview] setScrollEnabled:NO])。所以我将UIWebViews 放在UIView 中,这对我有用,但是我在UIWebView 中的HTML 中的交互式链接或div 不再起作用了。

                    唯一对我有用的是将UIWebView 保留在UIScrollView 中,以便HTML 交互起作用,但UIScrolling 不起作用。

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

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

                    【讨论】:

                      【解决方案15】:

                      在你的 HTML 中试试这个(&lt;HEAD&gt; 标签)

                      <script> 
                        document.ontouchmove = function(event) { event.preventDefault(); }
                      </script>
                      

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

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

                      【讨论】:

                        【解决方案16】:

                        我需要禁用滚动,因为关闭自定义键盘确实会扰乱 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;
                            }
                        }
                        

                        【讨论】:

                          【解决方案17】:

                          UIScrollview 上是否有 UIWebview 和 UITableView,并按照您的要求设置 webview 的高度(并添加到 Scrollview 的总 ContentSize)?

                          【讨论】:

                          • 差不多。但是在 tableView 标头中显示 WebView 似乎不那么复杂。但我的问题是:我可以通过 SDK 禁用 webView 滚动吗?如果没有,我是否可以通过 javascript 进行操作?
                          【解决方案18】:
                          [[[WebView subviews] lastObject] setScrollingEnabled:NO];
                          

                          【讨论】:

                          • 它将一直有效,直到滚动视图位置发生变化的更新
                          猜你喜欢
                          • 1970-01-01
                          • 2011-12-20
                          • 2012-07-19
                          • 2014-05-05
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2012-05-19
                          • 1970-01-01
                          相关资源
                          最近更新 更多