自动滚动到顶部在UITableView中不起作用

时间:2010-11-12 18:23:37

标签: iphone uitableview

通常在点击屏幕顶部时,桌面视图一直滚动到顶部。出于某种原因,这在我的一个视图控制器中不起作用。

hirarchy如下:

的UIView
- >的WebView
- > TableView中
----->搜索栏
SearchDisplayController。

我认为我已经正确连接了所有内容(datasource,delegate,...)。我有一个类似的视图控制器,一切正常。唯一的区别似乎是WebView,它在视图控制器中缺失,其中tap-and-scroll-to-top工作...

有什么想法吗?

祝你好运, 的Sascha

8 个答案:

答案 0 :(得分:30)

您可能已向视图层次结构添加了一些视图,该视图层次结构是UIScrollView或包含滚动视图(例如UIWebViewUITextView)。当您点按状态栏时,iOS会搜索最上面的滚动视图,scrollsToTop设置为YES并滚动到顶部。

将此添加到您的班级:

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

...并致电

[self disableScrollsToTopPropertyOnAllSubviewsOf:myAddedSubview];

解决问题并让您的表格视图再次滚动到顶部。

答案 1 :(得分:27)

您需要在除一个可滚动视图之外的所有视图上禁用scrollsToTop。由于UITableViewUIScrollView的后代,因此很容易做到。但是,如果你想在webview上禁用它,它会有点棘手。这似乎有效:

[webView.subviews objectAtIndex:0].scrollsToTop = NO;

但这有点不确定,因为它在webview的未记录部分中徘徊。如果Apple决定重新安排子视图,它可能会停止工作。

答案 2 :(得分:4)

不知道Apple吸烟的是什么,但按照设计,iPhone上的行为与iPad明显不同。 Apple's documentation确实包括以下“特别恭维”说明......

  

在iPhone上,如果有更多内容,滚动到顶部的手势无效   一个滚动视图在屏幕上,其中scrollsToTop设置为YES。

所以在iPhone上你必须确保只有一个UIScrollView(或UITableView / UICollectionView / UIWebView等)有scrollsToTop = YES

由于scrollsToTop默认为YES,因此您必须为UIScrollView显式设置scrollsToTop = NO,当用户点击状态栏时您不想滚动。

答案 3 :(得分:3)

显然,如果视图控制器中有多个滚动视图(在您的情况下是WebView和TableView),则“点击状态栏以滚动到顶部”将被禁用。

http://twitter.com/drance/status/2448035250438144

(Matt Drance是前iPhoneOS开发者布道者和当前iOS开发摇滚明星)

答案 4 :(得分:3)

opyh答案的快速变体。支持他!

func disableScrollsToTopPropertyOnAllSubviewsOf(view: UIView) {
    for subview in view.subviews {
        if let scrollView = subview as? UIScrollView {
            (scrollView as UIScrollView).scrollsToTop = false
        }
        self.disableScrollsToTopPropertyOnAllSubviewsOf(subview as UIView)
    }
}

答案 5 :(得分:1)

我只是想补充一点,如果您使用的是UITextView,则不是需要scrollsToTop调整的子视图,而是实际UITextView,简而言之需要这段代码:

[myTextView setScrollsToTop:FALSE];

这应解决问题(另外,'disableScrollsToTopPropertyOnAllSubviewsOf'功能在UITextViews 上不起作用。)

希望这有助于某人!

答案 6 :(得分:0)

我在NIB中只有一个tableview就遇到了这个问题。非常令人沮丧,直到我记得我是以编程方式添加UITextView作为表视图标题。 UITextView上的scrollsToTop = NO就可以了。

答案 7 :(得分:0)

在视图中的所有滚动视图上设置scrollsToTop = NO,但要滚动到顶部的滚动视图除外。这有助于系统找到正确的滚动视图。