以编程方式在iOS上滚动UIWebView

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以编程方式在iOS上滚动UIWebView相关的知识,希望对你有一定的参考价值。

如何在Objective-C(ios)中以编程方式滚动UIWebView?

我能想到的唯一解决方案是将它放在UIScrollView中并以编程方式滚动它,但是这会出现Web视图通常大小错误的问题,因此滚动时页面底部会被切断。我不知道如何以编程方式更改Web视图的大小以适应其内容...到目前为止,我有:

UIView *webDocView = webView.subviews.lastObject;
webView.frame = CGRectMake(webView.frame.origin.x, webView.frame.origin.y, webView.frame.size.width, webDocView.frame.size.height);

但由于某些原因,这将无法奏效。

我应该追求使用ScrollView的解决方案......还是有更好的方法来做到这一点?

答案

UIWebView没有任何属性指定其在呈现的文档上的位置。您可能需要通过javascript执行此操作,如果您想要它的动画感觉,请查看此内容。 http://www.learningjquery.com/2007/09/animated-scrolling-with-jquery-12

另一答案

Apple说:“你不应该在UIS​​crollView对象中嵌入UIWebView对象。如果你这样做,可能会导致意外的行为,因为这两个对象的触摸事件可能混淆和错误处理。”这可能与UIWebView和UIScrollView的可滚动实例有很大关系,并且两个滚动请求的交互太多了。

另一答案

这是一个我测试过的简单解决方案,它的工作原理如下:

在viewDidLoad中添加以下内容以在webView上添加scrollView:

    self.scrollView = [[UIScrollView alloc] init];
self.scrollView.delegate = self;
[self.webView addSubview:self.scrollView];

当页面加载时,我们调整scrollView的frame和contentSize

-(void) webViewDidFinishLoad:(UIWebView *)webView {
self.scrollView.frame = webView.bounds;
self.scrollView.contentSize = webView.scrollView.contentSize;
}

现在,您可以通过将self.webView.scrollView.contentOffset设置为您想要以编程方式创建的任何CGPoint来更改Web view.scrollView的偏移量。

请记住,通过这样做,触摸事件不再传递到webiview。如果您希望Web视图仍然响应用户拖动,那么也执行以下操作:

#pragma mark UIScrollView Delegate
-(void) scrollViewDidScroll:(UIScrollView *)scrollView {
self.webView.scrollView.contentOffset = scrollView.contentOffset;
}

以上是关于以编程方式在iOS上滚动UIWebView的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS Swift 3 中以编程方式添加 Web 视图时如何在 UIWebView 中获取响应状态代码?

使用没有alertView的UIWebView在iOS中以编程方式进行电话呼叫

在没有 alertView 的情况下使用 UIWebView 在 iOS 中以编程方式拨打电话

iOS:以编程方式在以编程方式创建的滚动视图中创建标签

UIWebView 向下滚动

在 iOS 11 上以编程方式滚动 UISearchController 的搜索栏不会消失