UIWebView中的ScrollOffset?

sni*_*kst 9 iphone cocoa-touch objective-c

我很难理解委托和对象继承(如果我可以使用这个词),我认为我需要一个简单的(或者我认为)的东西:在UIWebView中捕获scrollViewDidScroll事件并获得偏移(基本上,只是要知道如果滚动不在顶部/底部,那么我可以隐藏导航和标签栏).

有什么办法可以吗?我已经在我的视图控制器中使用UIWebviewDelegate来"shouldStartLoadWithRequest".也许我可以使用UIScrollViewDelegate如何使用scrollViewDidScroll?如果是,那怎么样?

我真的很难理解代表.我发布了一些文章,但实际上,我还是无法使用它们.

任何帮助或信息都很可爱.

先感谢您!

Ced*_*rie 13

要在UIWebView上检索滚动事件,我个人使用此代码来获取UIWebView内的scrollview:

- (void) addScrollViewListener
{
    UIScrollView* currentScrollView;
    for (UIView* subView in self.myWebView.subviews) {
        if ([subView isKindOfClass:[UIScrollView class]]) {
            currentScrollView = (UIScrollView*)subView;
            currentScrollView.delegate = self;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它正在发挥作用.您也可以使用它来调用[currentScrollView setContentOffset:offSet animated:YES];唯一的问题可能是不能通过Apple代码检查.我还不知道,因为我还处于编码阶段.

[更新]具有此代码的应用程序现在在应用商店中存在4个月,并由40,000个用户使用.我没有遇到任何麻烦[更新]


Bir*_*chi 7

您可以使用以下方法来解决您的问题.

获取pageOffset:

int pageYOffset = [[webViewObj stringByEvaluatingJavaScriptFromString:@"window.pageYOffset"] intValue];

要获取网页的总滚动高度:

int scrollHeight = [[webViewObj stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight"] intValue];

用于将网页滚动到特定偏移量:

[webViewObj stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.body.scrollTop =%d",scrollHeight]];


Six*_*tto 2

中有一个滚动视图UIWebView,但它 a) 不是 a UIScrollView,b) 是 Apple 认为是私有实现细节的东西(你也应该这样做)。我真的只有两个建议:

  1. 向 Apple 提交一个错误,要求他们公开更多的 Web 视图基础设施,或者至少添加一些更多的委托方法,通过这些方法我们可以收到此类事件的通知。
  2. 将一些 JavaScript 代码添加到您的页面,以侦听滚动事件,并将这些事件通知您的应用程序。

#2 的基本原理是加载一个假 URL,并让您的 Web 视图委托进程(并中止!)该加载。(这个问题在 Stack Overflow 上出现过几次。)

更新:

从 iOS 5 开始,现在有一个公共scrollView属性UIWebView可以用来自定义滚动行为。Web 视图的确切视图层次结构仍然是未记录的实现细节,但这为您提供了访问这一部分的认可方法。