以编程方式在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说:“你不应该在UIScrollView对象中嵌入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中以编程方式进行电话呼叫