【问题标题】:Can't get scrollsToTop working on iOS7无法在 iOS7 上运行 scrollsToTop
【发布时间】:2013-10-04 05:43:50
【问题描述】:

我在最新的应用程序中以 iOS7 为目标,点击状态栏似乎不会将 tableView 或 collectionView 滚动到顶部。

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

我知道 Apple 对 iOS7 中的状态栏进行了重大更改,但这些更改是否破坏了scrollsToTop 功能?

更新

针对其中一个答案中的评论,我进行了测试以确保我的集合视图确实是屏幕上唯一的滚动视图,并且它是:

(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,其中导航栏是透明的,并在我的 collection/tableViews 在下方滚动时应用模糊。

更新 #3

想通了。原来我确实在屏幕上有不止一个滚动视图。我的应用程序在应用程序的主要部分下方有一个左侧抽屉菜单,该菜单有一个用于选项的 tableView。我只是设置了self.menuTable.scrollsToTop = false,并且在应用程序的其余部分中一切都按预期工作。不必实现 scrollView 委托方法或任何东西。

【问题讨论】:

  • 是否需要设置类似 self.scrollView.scrollEnabled = YES; ?但是对于 tableview..
  • 更新#3 中的好建议,以同样的方式得到了解决。但奇怪的是,如果没有更新 #3 修复,它在 iOS8 中有效,但在 iOS7 中无效。

标签: iphone objective-c uitableview ios7 uistatusbar


【解决方案1】:

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

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

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

【讨论】:

  • 据我所知,我的 tableView 仅位于一个特定的视图控制器中,而 collectionView 位于另一个视图控制器中。我将两者都设置为 scrollsToTop = true,并实现了您建议的 scrollview 委托方法。我在顶部抛出了一个日志语句,并且该方法永远不会被调用。我在模拟器和设备上试过了。
  • 这两个视图控制器的视图是否同时可见?
  • 抱歉给您带来了困惑。这是应用程序的两个完全不同的部分。
  • 屏幕上是否还有其他滚动视图(或滚动视图子类,例如表格视图或集合视图)?正如苹果的文档所说,“在 iPhone 上,如果屏幕上有多个滚动视图将 scrollsToTop 设置为 YES,则滚动到顶部手势无效。”
  • 不,我的收藏视图是唯一的。查看我的问题的更新,我在其中发布了 [self.view recursiveDescription] 的结果
【解决方案2】:

简短的回答是在 iOS7 中没有什么不同。只要加载的 UIScrollView 不超过一个,当用户点击状态栏时,您的 tableView 或 collectionView 就会滚动到顶部。此处的密钥已加载;另一个 scrollView 不一定必须在屏幕上才能与另一个 scrollView 冲突。

现在左右滑动抽屉非常流行,这就是我遇到问题的原因。我有一个包含导航选项的菜单,这些都由 UITableView 保存。我必须确保我设置了 menuTable.scrollsToTop = false,然后才能让应用程序的其他部分正常工作。

【讨论】:

  • 是的!这为我做到了! :D
  • 谢谢!你拯救了我的一天:)
  • 这肯定会节省我的时间。
【解决方案3】:

我的问题是我的UITextViewscrollsToTop 设置为YES,所以我的UITableView 没有响应手势。简而言之,检查所有其他可滚动视图。

【讨论】:

    【解决方案4】:

    为他人:

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

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

    【讨论】:

      【解决方案5】:

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

      - (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];
      

      【讨论】:

        【解决方案6】:

        这总是对我有用:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-04
          • 2022-01-07
          • 2021-10-27
          相关资源
          最近更新 更多