iOS6 ScrollBarShouldScrollToTop没有触发/ ScrollView Delegate问题

时间:2012-09-24 03:12:38

标签: uiscrollview ios6 uiscrollviewdelegate

我正在向我的应用添加一个虚拟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永远不会被调用。这是一个错误? API说它仍然可以作为iOS6中委托的一部分使用,但在设备和模拟器上的iOS6下它永远不会执行......任何人都知道发生了什么?

仍然没有其他TableView或ScrollView,但有一个MAPVIEW ??但MapView没有一个我可以找到设置为NO的shouldScrollToTop ..所以我仍然无法理解为什么它在iOS 6下停止工作...

2 个答案:

答案 0 :(得分:5)

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

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

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

myCustomCellWithAWebView.webView.scrollView.scrollsToTop = NO;

希望这有帮助!

答案 1 :(得分:0)

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

并且,该scrollView无法隐藏或0 alpha。

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

所以在iOS 6上,你需要

dummyScrollView.frame = self.view.bounds;
dummyScrollView.backgroundColor = [UIColor clearColor];