window.pageYOffset在iOS7中不起作用

时间:2013-09-25 10:03:25

标签: javascript ios uiwebview

我目前有以下代码来检查到达页面末尾的距离;

var untilPageEnd = $(document).height() - (window.pageYOffset + window.innerHeight);

在iOS7之前的应用中,这可以完美运行。但是现在我的iOS7应用程序window.pageYOffset一直返回0。有没有任何已知的解决方案?

window.pageYOffset在safari浏览器中有效,但在UIWebView中无效

2 个答案:

答案 0 :(得分:2)

如果在UIWebView上覆盖UIScrollViewDelegate?

在iOS7中,你需要像那样进行修改

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    [super scrollViewDidScroll:scrollView];
    //TO DO
    //code goes here
}

答案 1 :(得分:0)

我遇到了同样的问题,已经放弃了iOS7下的window.pageYOffset - 自iOS3起,同样的代码对我有用了!

我的解决方案:我使用的UIWebView的子类实现了

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

方法&因为我有

CGFloat newOffY = scrollView.contentOffset.y + topLength

通过以下方式从包含UIViewController设置topLength:

    CGFloat topLength = 0;
    CGFloat bottomLength = 0;
    if([self respondsToSelector:@selector(topLayoutGuide)] && !self.isFullScreen) {
        topLength = [[self topLayoutGuide] length];
        bottomLength = [[self bottomLayoutGuide] length];
    }

然后,您可以将newOffY传递回您的UIWebView,以便在您的JavaScript中使用。

是的,这是一个黑客,但这就是我现在正在iOS7下工作的方式。 :/

(我的测试已经产生了一个理论,即由于iOS7中新的topLayoutGuide内容或者Apple已经重做了UIWebViews的实现方式,windows.pageYOffset现在已经被破坏了,现在你正在滚动UIScrollView而不是UIWebView& so由于滚动发生在较低级别,javascript无法检测到滚动?)