如何在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的解决方案......还是有更好的方法来做到这一点?
答案 0 :(得分:4)
UIWebView没有任何属性指定其在呈现的文档上的位置。您可能需要通过Javascript执行此操作,如果您想要它的动画感觉,请查看此内容。 http://www.learningjquery.com/2007/09/animated-scrolling-with-jquery-12
答案 1 :(得分:0)
Apple说:“你不应该在UIScrollView对象中嵌入UIWebView对象。如果你这样做,可能会导致意外的行为,因为两个对象的触摸事件可能混淆和错误处理。”这可能与UIWebView和UIScrollView的可滚动实例有很大关系,而且两个滚动请求的交互太多了。
答案 2 :(得分:0)
这是一个我测试过的简单解决方案,它可以运行:
在viewDidLoad中添加以下内容,在webView上添加scrollView:
self.scrollView = [[UIScrollView alloc] init];
self.scrollView.delegate = self;
[self.webView addSubview:self.scrollView];
当页面加载时,我们调整scrollView的框架和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;
}