5

我正在向我的应用程序添加一个虚拟 ScrollView 以检测用户单击状态栏,以在我的程序中执行一个事件。我在 ViewDidLoad 中创建它:

//Dummy Scroll is for the tap on status bar to work 

UIScrollView *dummyScrollView = [[UIScrollView alloc] init]; 
dummyScrollView.delegate = self; 
[[self view ] addSubview:dummyScrollView]; 
[[self view] sendSubviewToBack:dummyScrollView];  

然后我实施:

 - (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView 
 { 

NSLog(@"scrollViewShouldScrollToTop");
 .
 .
 }

在所有以前的 IOS 版本下,它都可以完美无瑕地工作,但在 iOS 6 下,scrollViewShouldScrollToTop 永远不会被调用。这是bug吗??API 说这应该仍然可以作为 iOS6 中委托的一部分使用,但是在设备和模拟器上的 iOS6 下它永远不会执行......有人知道发生了什么吗?

还是没有其他TableView或者ScrollView,但是有MAPVIEW??但是 MapView 没有我可以找到设置为 NO 的 shouldScrollToTop .. 所以我仍然很困惑为什么它在 iOS 6 下停止工作...

4

2 回答 2

5

您创建的 UIScrollView 是否有可能不是您的视图层次结构中唯一的 UIScrollView?看起来在 iOS6 中,如果您的视图层次结构中有多个 UIScrollView,则应该只有一个scrollsToTop = YES. 这是将调用其 scrollViewShouldScrollToTop 方法的方法。

我的问题类似,因为我有一个非常基本的 UITableView,当点击状态栏时,它不再自动滚动到顶部。我终于记得我的 tableView 中的一个单元格使用 UIWebView,并且该单元格webView.scrollView(正确地,现在在 iOS6 中)劫持了对 scrollViewShouldScrollToTop 的调用,在 iOS6 之前,它是在我的 tableView 上进行的。

设置 tableViewCell 的“scrollsToTop = NO”后,状态栏自动滚动再次像以前一样工作。这里或多或少是代码的样子:

myCustomCellWithAWebView.webView.scrollView.scrollsToTop = NO;

希望这可以帮助!

于 2012-10-03T19:58:50.777 回答
0

在 iOS 6 上,只有点击状态栏滚动视图上方的部分才能触发 scrollsToTop 事件。

而且,该 scrollView 不能被隐藏或 0 alpha。

但它可以被覆盖。或清除背景颜色。

所以在 iOS 6 上,你需要

dummyScrollView.frame = self.view.bounds;
dummyScrollView.backgroundColor = [UIColor clearColor];  
于 2012-11-16T09:25:44.583 回答