如何将UIWebView垂直滚动事件传输到父视图?

时间:2013-12-23 07:25:03

标签: ios uiwebview scroll

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

UIView->UITableView->UITableiViewCell-> UIWebView

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

你能帮帮我吗?

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如果要加载本地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内容大小设置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];
  }
 }

答案 2 :(得分:0)

您应该将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
}