无法让scrolllsToTop在iOS7上运行

时间:2013-09-27 19:54:37

标签: iphone objective-c uitableview ios7 uistatusbar

我的目标是在我的最新应用中使用iOS7,点击状态栏似乎无法将tableView或collectionView滚动到顶部。

我已设置self.tableView.scrollsToTop = true但仍然没有任何反应。

我知道Apple在iOS7中显着改变了状态栏,但这些更改是否会破坏scrollsToTop功能?

更新

为了回应其中一个答案中的评论,我测试了以确保我的集合视图确实是屏幕上唯一的scrollView,它是:

(lldb) po [self.view recursiveDescription]
<UIView: 0x1092ddf0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x109357e0>>
   | <UICollectionView: 0x11351800; frame = (0 0; 320 568); clipsToBounds = YES; opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x10966080>; layer = <CALayer: 0x109623a0>; contentOffset: {0, -64}> collection view layout: <UICollectionViewFlowLayout: 0x10940a70>
   |    | <UIImageView: 0x10965fa0; frame = (0 564.5; 320 3.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x10965ee0>> - (null)
   |    | <UIImageView: 0x10948f60; frame = (316.5 561; 3.5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x10966030>> - (null)

更新#2

不确定是否重要,但我使用的是标准的iOS7 NavigationController,其中navigationBar是透明的,并且当我们在下面滚动时将模糊应用到我的集合/ tableViews。

更新#3

想出来。结果我做了在屏幕上有多个scrollView。我的应用程序在应用程序的主要部分下面有一个左抽屉菜单,该菜单有一个tableView用于选项。我只需设置self.menuTable.scrollsToTop = false,一切都在应用程序的其余部分按预期工作。没有必要实现scrollView Delegate方法或任何东西。

6 个答案:

答案 0 :(得分:23)

屏幕上是否有多个滚动视图/表格视图/集合视图?如果是这样,只有其中一个可以将scrollsToTop设置为YES,否则iOS7不会将其中的任何一个滚动到顶部。

您还可以实现UIScrollViewDelegate方法scrollViewShouldScrollToTop:,如果传入的滚动视图等于您要滚动到顶部的滚动视图,则返回YES:

- (BOOL) scrollViewShouldScrollToTop:(UIScrollView*) scrollView {
    if (scrollView == self.myTableView) {
        return YES;
    } else {
        return NO;
    }
}

答案 1 :(得分:11)

简短的回答是iOS7没有什么不同。只要加载的UIScrollView不超过一个,当用户点击状态栏时,tableView或collectionView将滚动到顶部。这里的关键是加载;另一个scrollView不一定必须在屏幕上与另一个scrollView冲突。

这些天左右滑动抽屉很受欢迎,这就是我遇到问题的原因。我有一个包含我的导航选项的菜单,这些都是由UITableView持有的。我必须确保在我能够在应用程序的其他部分工作之前设置menuTable.scrollsToTop = false

答案 2 :(得分:7)

我的问题是我的UITextView scrollsToTop设置为YES,因此我的UITableView没有回应这个动作。简而言之,请检查所有其他可滚动视图。

答案 3 :(得分:4)

其他人:

请记住,您正在搜索的滚动视图也可以是UIWebView ..而不仅仅是UITableView。 另一个重要的事情是,它不仅仅是关于VISIBLE scrollViews,还有LOADED滚动视图。

如果找不到scrollView,则可以随时使用 在应用程序启动时立即插入UITableView测试表,检查它是否滚动到顶部, 然后加载越来越多的视图,直到测试表停止滚动到顶部。

答案 4 :(得分:4)

如果您的表格单元格是动态的,请删除以下内容:

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
{
    return YES;
}

按如下方式创建一个新功能:

- (void) disableScrollsToTopPropertyOnAllSubviewsOf:(UIView *)view {
    for (UIView *subview in view.subviews) {
        if ([subview isKindOfClass:[UIScrollView class]]) {
            ((UIScrollView *)subview).scrollsToTop = NO;
        }
        [self disableScrollsToTopPropertyOnAllSubviewsOf:subview];
    }
}

- (void)viewDidLoad

中调用上述功能
[self disableScrollsToTopPropertyOnAllSubviewsOf:self.view];

现在为表视图启用ScrollsToTop,如下所示:

[myTableView setScrollsToTop:YES];

答案 5 :(得分:-2)

这对我来说总是有用的:

[self.tableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];