这看起来像是一个可以有简单解决方案的问题,但我还没有找到任何可以导致它的方法。我在 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混淆?或者某种解决方法也很好。
有什么想法吗?
最佳答案
我昨晚遇到了这个问题,直到我终于在评论的评论中找到了答案。 idea of that original post是当您将 UIWebView 添加到 UIScrollingView 时,您使用以下内容:
- (void) ensureScrollsToTop: (UIView*) ensureView {
((UIScrollView *)[[webView subviews] objectAtIndex:0]).scrollsToTop = NO;
}
这对我来说似乎很可疑,因为 UIWebView 的第一个 subview 声称是 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
EDIT: Just another quick note about where this actually needs to occur: in the webViewDidFinishLoad callback. Calling it on UIWebView construction isn't good enough because at that time the UIWebView hasn't created it's child views yet, which are the ones causing the problem:
- (void)webViewDidFinishLoad:(UIWebView *) wv {
[self ensureScrollsToTop: wv];
}
编辑#2:
现在,在 iOS 5 中,如 iPhone OS: Tap status bar to scroll to top doesn't work after remove/add back 中所述使用 UIWebView 的新 @propertyscrollView,对于不使用低于 iOS 5.0 的部署目标的项目来说,无需实现 ensureScrollsToTop
。
关于iphone - UIScrollView + UIWebView = 没有滚动到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2175281/