如何将 UIWebView 垂直滚动事件传输到父视图?
Posted
技术标签:
【中文标题】如何将 UIWebView 垂直滚动事件传输到父视图?【英文标题】:How to transmit a UIWebView vertical scroll event to the parent view? 【发布时间】:2013-12-23 07:25:02 【问题描述】:我在我的UITableiViewCell
实例中添加了一个UIWebView
实例作为子视图,视图的层次结构如下:
UIView->UITableView->UITableiViewCell-> UIWebView
问题是当我在 web 视图中垂直滚动时,父 tableview 没有滚动!我不想设置UIWebView
的属性userInteractionEnabled = NO
,我只想在水平方向滚动我的网页视图。
你能帮帮我吗?
【问题讨论】:
【参考方案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];
【讨论】:
谢谢你的回答,我试过你的第一种方法,但是不行,第二种方法不是我想要的,因为我只想禁用垂直滚动。以上是关于如何将 UIWebView 垂直滚动事件传输到父视图?的主要内容,如果未能解决你的问题,请参考以下文章
在 CSS flexbox 布局中,如果父级可垂直滚动,是不是有办法将子块高度锁定到父级(滚动)高度?
UISwipeGestureRecognizer 垂直于 UIWebView 滚动:如何避免对角滑动?