通常在点击屏幕顶部时,桌面视图一直滚动到顶部。出于某种原因,这在我的一个视图控制器中不起作用。
hirarchy如下:
的UIView
- >的WebView
- > TableView中
----->搜索栏
SearchDisplayController。
我认为我已经正确连接了所有内容(datasource,delegate,...)。我有一个类似的视图控制器,一切正常。唯一的区别似乎是WebView,它在视图控制器中缺失,其中tap-and-scroll-to-top工作...
有什么想法吗?
祝你好运, 的Sascha
答案 0 :(得分:30)
您可能已向视图层次结构添加了一些视图,该视图层次结构是UIScrollView或包含滚动视图(例如UIWebView
或UITextView
)。当您点按状态栏时,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
。由于UITableView
是UIScrollView
的后代,因此很容易做到。但是,如果你想在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
,但要滚动到顶部的滚动视图除外。这有助于系统找到正确的滚动视图。