以编程方式在iOS上滚动UIWebView

时间:2010-08-02 20:40:39

标签: ios objective-c scroll uiscrollview 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的解决方案......还是有更好的方法来做到这一点?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

Apple说:“你不应该在UIS​​crollView对象中嵌入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;
}