【问题标题】:UITableView's, UIWebViews and the scrollsToTop Property = TroubleUITableView、UIWebViews 和 scrollsToTop 属性 = 麻烦
【发布时间】:2011-02-11 10:32:32
【问题描述】:

我的应用有一个UITableView。该 UITableView 有一个标题视图,即UIWebView

默认情况下,滚动视图的scrollsToTop 属性设置为YES,这将使用户能够点击状态栏滚动到滚动视图的顶部。

当在一个视图中嵌入两个滚动视图时,它们的scrollsToTop 属性都设置为YES,点击状态栏不会执行任何操作。

解决方案是将scrollsToTop 属性之一设置为NO。这将重新启用点击状态栏。

现在的问题是:UIWebView 没有公开它的滚动视图,因此无法访问它的scrollsToTop 属性。我只希望在点击状态栏时表格视图滚动到顶部,而不是 Web 视图。

有谁知道我如何做到这一点?

【问题讨论】:

    标签: iphone uitableview uiwebview scroll uiscrollview


    【解决方案1】:

    现在有一个 scrollView 属性,这是首选:

    myWebView.scrollView.scrollsToTop = YES;
    

    【讨论】:

      【解决方案2】:

      这个问题包含答案:

      iPhone OS: Tap status bar to scroll to top doesn't work after remove/add back

      我之前找不到它,因为它被问到了不同的问题并且主题略有不同,但结果是一样的。

      所以结果是遍历子视图,直到找到滚动视图。我以前在其他应用程序中这样做过,在这种情况下没有想到。它应该是 App-Store-Safe 的,因为我在商店里有使用这个想法的应用程序。

      UIWebView 上用于启用或禁用滚动到顶部的类别:

      @implementation UIWebView (UIWebViewScrollToTopAdditions)
      
      - (void)setScrollsToTop:(BOOL)scrollsToTop
      {
          if ([[self subviews] count] > 0)
          {
              UIScrollView *scrollView = (UIScrollView *)[[self subviews] objectAtIndex:0];
              if ([scrollView respondsToSelector:@selector(setScrollsToTop:)])
              {
                  [scrollView setScrollsToTop:scrollsToTop];
              }
          }
      }
      
      @end
      

      【讨论】:

        【解决方案3】:

        这经常发生,因为所有滚动视图都有一个默认值。当创建新的滚动视图或 web 视图时,它们会将 scrollsToTop 设置为 YES。我为这个特定问题写了一个简单的类别:

        -[UIScrollView makeOnlyThisScrollViewScrollToTopOnStatusBarTap];
        

        https://gist.github.com/hfossli/6776203

        它基本上将所有其他滚动视图上的 scrollsToTop 设置为 NO,而不是您指定的滚动视图 + 处理默认值。祝你好运!

        【讨论】:

        • 这是唯一对我有用的东西。在我看来应该有更多的赞成票。谢谢你。
        【解决方案4】:

        您是否尝试过 UIScrollViewDelegate scrollViewShouldScrollToTop 的委托方法?

        【讨论】:

        • 它似乎不起作用。我最初尝试与 UIWebViewDelegate 方法一起实现该方法,但我认为这不会起作用,因为 Web 视图本身是滚动视图委托,而不是 Web 视图的委托。所以然后我将 UIWebView 子类化并实现了,但仍然没有运气。它似乎不起作用。
        • 进一步调查:UIWebView 本身似乎没有响应滚动视图委托方法。也许其他一些内部对象是滚动视图委托?
        猜你喜欢
        • 2016-08-13
        • 2015-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-08
        • 1970-01-01
        相关资源
        最近更新 更多