我有一种笨拙的方法来做这可能会或可能不会帮助你。
您尝试使用scrollViewWillBeginDecelerating:做某事没有奏效,因为该方法只是给您消息,而不是请求许可(返回无效)。
相反,您可以实现scrollViewDidScroll:,这也不需要请求许可,但在该方法中,您可以通过设置contentOffset值来防止滚动发生,这样滚动视图实际上不会移动。要完成这项工作,您必须在其他地方检测到您不想滚动并保存contentOffset。
// Condition starts. Save the content offset
if (whatever) {
lockedContentOffset = tableView.contentOffset;
}
...
- (void) scrollViewDidScroll:(UIScrollView *)scrollView {
if (condition_for_which_i_dont_want_to_scroll) {
scrollView.contentOffset = lockedContentOffset;
NSLog(@"Reset content offset");
}
}
每次尝试滚动时,方法scrollViewDidScroll:都会被调用多次,因为 scrollView 仍在尝试滚动并且具有动量。然而,在我对这段代码的测试中,我没有看到任何明显的滚动。
希望这可以帮助。