通过点击状态栏无法工作(包含许多子视图)SWIFT滚动到顶部TableView

时间:2015-11-04 13:31:02

标签: ios swift uitableview scroll statusbar

我有很多观点,每个观点都有很多子视图。 我试图为每个子视图指定

string _statement = "IF($G4>100,1,0)";

但是当我按状态栏时,我的scrollsToTop = false 不会滚动到顶部。 我想我错过了一些观点...

SB

我知道有一个类似的帖子,但它没有回答(UITableView scroll to top when tapping status bar at top of the screen

所以我决定实现这个功能:

TableView

但它也不起作用。我不知道我错过了什么。

2 个答案:

答案 0 :(得分:4)

你可能会遇到两个问题:

  1. 您有多个UIScrollView个实例。您应该为父scrollsToTop或从中继承的对象(例如self.collectionView?.scrollsToTop = falseviewDidLoad)停用UIScrollView(例如UITableView中的UICollectionView) )。
  2. 来自Apple scrollViewShouldScrollToTop(_:)

      

    如果委托没有实现此方法,则假定为true。要使滚动到顶部的手势(点击状态栏)生效,UIScrollView的scrollsToTop属性必须设置为YES。

    1. 如果您的层次结构是高度自定义的,则不会调用方法scrollViewShouldScrollToTop。你应该检查为什么会发生。否则你将需要做一些肮脏的工作:添加一些手势并处理它们。
    2. 有趣的链接:

      Scroll to top of UITableView by tapping status bar

      Why doesn't UIScrollView/UITableview respond to taps on the status bar, and scroll to the top?

      https://developer.apple.com/library/prerelease/ios//documentation/UIKit/Reference/UIScrollViewDelegate_Protocol/index.html#//apple_ref/occ/intfm/UIScrollViewDelegate/scrollViewShouldScrollToTop

答案 1 :(得分:3)

好的,我发现为什么我的tableview不会滚动!

我只在我的表视图的视图控制器的viewDidLoad中调用了checkForScrollViewInView()函数。为每个子视图禁用scrollToTop。

但是我忘记了我有另一个"活跃"查看控制器...在我的应用程序中,我有一个左侧菜单,可以打开滑动。在左侧菜单的视图控制器中调用checkForScrollViewInView()解决了我的问题。

func checkForScrollViewInView(view:UIView) {

    for subview in view.subviews as [UIView] {

        if subview.isKindOfClass(UITextView) {
            (subview as! UITextView).scrollsToTop = false
        }

        if subview.isKindOfClass(UIScrollView) {
            (subview as! UIScrollView).scrollsToTop = false
        }

        if subview.isKindOfClass(UITableView) {
            (subview as! UITableView).scrollsToTop = false
        }

        if (subview.subviews.count > 0) {
            self.checkForScrollViewInView(subview)
        }
    }
}