【问题标题】:How to transmit a UIWebView vertical scroll event to the parent view?如何将 UIWebView 垂直滚动事件传输到父视图?
【发布时间】:2013-12-23 07:25:02
【问题描述】:

我在我的UITableiViewCell 实例中添加了一个UIWebView 实例作为子视图,视图的层次结构如下:

UIView->UITableView->UITableiViewCell-> UIWebView

问题是当我在 web 视图中垂直滚动时,父 tableview 没有滚动!我不想设置UIWebView的属性userInteractionEnabled = NO,我只想在水平方向滚动我的网页视图。

你能帮帮我吗?

【问题讨论】:

    标签: ios uiwebview scroll


    【解决方案1】:

    你应该正确设置contentSize的属性。

    webView.scrollView.contentSize = CGSizeMake(PREDEFEINED_WIDTH, HEIGHT_OF_YOUR_TABLE_CELL);
    

    【讨论】:

    • 在 webview 滚动视图中触摸 contentsize 绝不是一个好主意。
    【解决方案2】:

    您应该继承 UIWebView 并使用自定义委托将 scrollViewDidScroll 事件传递回您的父视图。

    在 MyWebView.h 中

    @protocol MyWebViewScrollDelegate <NSObject>
        -(void) webViewDidScroll:(UIWebView *)theWebView;
    @end
    
    
    @interface MyWebView : UIWebView
        @property (nonatomic, weak) id<MyWebViewScrollDelegate> scrollDelegate;
    @end
    

    在 MyWebView.m 中

    @implementation MyWebView
    
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        [super scrollViewDidScroll:scrollView];
        if (_scrollDelegate && [_scrollDelegate respondsToSelector:@selector(webViewDidScroll:)]) {
            [_scrollDelegate webViewDidScroll:scrollView];
    }
    
    @end
    

    然后在你的父视图中

    MyWebView *v = [[MyWebView alloc]init];
    v.scrollDelegate = self;
    

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        //do whatever you want with the scrollview
    }
    

    【讨论】:

      【解决方案3】:

      如果您正在加载本地 html 文本,您可以使用以下代码禁用垂直滚动。

                               <html>
                               <head>
                               <style type=\"text/css\"> \n"
                               "body {overflow-x: scroll;overflow-y: hidden;}\n"
                               "</style>
                               </head>
                               <body>
                               //your content
                               </body>
                               </html>.
      

      或者将 Webview 的框架大小设置为内容大小。根据 UIwebview Content Size 设置 UITableview 的框架有点困难。您仍然可以禁用 Scrollview 滚动。

       UIView * v = [[webView subviews] lastObject];
       if([v isKindOfClass:[UIScrollView class] ]) {
        if ([v respondsToSelector:@selector(setScrollEnabled]) {
          [v setScrollEnabled:NO];
        }
        if ([v respondsToSelector:@selector(bounces)]) {
          [v bounces:NO];
        }
       }
      

      【讨论】:

      • 谢谢你的回答,我试过你的第一种方法,但是不行,第二种方法不是我想要的,因为我只想禁用垂直滚动。
      猜你喜欢
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 2017-07-30
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 2011-07-29
      相关资源
      最近更新 更多