我正在向我的应用添加一个虚拟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下停止工作...
答案 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];