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



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

UIView->UITableView->UITableiViewCell-> UIWebView

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

你可以帮我吗?

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

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

您应该使用自定义委托对 UIWebView 进行子类化,并将 scrollViewDidScroll 事件中继回父视图。

in MyWebView.h

@protocol MyWebViewScrollDelegate <NSObject>
    -(void) webViewDidScroll:(UIWebView *)theWebView;
@end

@interface MyWebView : UIWebView
    @property (nonatomic, weak) id<MyWebViewScrollDelegate> scrollDelegate;
@end

in 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
}

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

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

或者将 Web 视图的框架大小设置为"内容大小"。根据UIwebview内容大小设置UITableview的框架有点困难。您仍然可以禁用滚动视图滚动。

 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];
  }
 }

相关内容

  • 没有找到相关文章

最新更新