当前位置:  开发笔记 > Android > 正文

UIScrollView + UIWebView =没有scrollsToTop

如何解决《UIScrollView+UIWebView=没有scrollsToTop》经验,为你挑选了1个好方法。

它看起来像一个可以有简单解决方案的问题,但我没有找到任何可能导致它的方法.我在UIScrollView中使用UIWebView并点击statusBar(将内容滚动到顶部)不起作用.

我做了简单的测试应用程序,看看它是否真的是UIWebViews的错误.它确实是.

//  scrolls to top on status bar tap 
UIScrollView *sv = [[UIScrollView alloc] init];
sv.frame = CGRectMake(0, 0, 320, 480);
sv.contentSize = CGSizeMake(320, 1200);
[self.view addSubview:sv];

// doesn't scroll
UIScrollView *sv = [[UIScrollView alloc] init];
sv.frame = CGRectMake(0, 0, 320, 480);
sv.contentSize = CGSizeMake(320, 1200);

UIWebView *wv = [[UIWebView alloc] init];
wv.frame = CGRectMake(0, 0, 320, 100);
[sv addSubview:wv]; 

[self.view addSubview:sv];

所以,我想也许我可以禁用一些东西让UIWebView不要乱用scrollToTop?或者某种解决方法也很好.

有任何想法吗?



1> nivekastoret..:

我昨晚遇到了这个问题,直到我终于找到答案的评论.原始帖子的想法是,当您将UIWebView添加到UIScrollingView时,您使用以下内容:

- (void) ensureScrollsToTop: (UIView*) ensureView {
    ((UIScrollView *)[[webView subviews] objectAtIndex:0]).scrollsToTop = NO;
}

这对我来说似乎很可疑,因为UIWebView的第一个子视图声称是UIScroller,它不是UIScrollView的子类.但是,由于UIScroller支持scrollsToTop属性,因此强制转换只是为我们提供了一条超越编译器警告的方法:

Class List:
    Class = UIScroller
    Class = UIView
    Class = UIResponder
    Class = NSObject
Supported Methods:
    ...
    Method _scrollToTop
    Method setScrollsToTop:
    Method scrollsToTop
    ...
Supported Properties:
    Property scrollsToTop

编辑:关于实际需要发生的地方的另一个快速说明:在webViewDidFinishLoad回调中.在UIWebView构造上调用它是不够好的,因为那时UIWebView还没有创建它的子视图,这是导致问题的原因:

- (void)webViewDidFinishLoad:(UIWebView *) wv {    
    [self ensureScrollsToTop: wv];
}

编辑#2:

现在,在iOS 5中,如iPhone OS中所述:在删除/添加后使用UIWebView的新@property scrollView,点击状态栏滚动到顶部不起作用,使得ensureScrollsToTop不使用低于iOS的部署目标的项目不需要实现5.0.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有