2010-11-12 135 views
19

中不起作用,通常在點擊屏幕頂部時,tableview會一直滾動到頂部。出於某種原因,這在我的一個視圖控制器中不起作用。自動滾動到頂部在UITableView

的hirarchy如下:

的UIView
- > web視圖
- >的TableView
----->搜索欄
SearchDisplayController。

我想我已經正確地連接了一切(數據源,委託,...)。我有一個類似的視圖控制器,一切正常。唯一的區別似乎是WebView,在視圖控制器中缺少點擊和滾動到頂部的作品...

任何想法?

最好的問候, 薩沙

回答

27

您需要在其它所有滾動視圖之一禁用scrollsToTop。由於UITableViewUIScrollView的後裔,因此很容易做到。不過,如果你想在web視圖上禁用它,這有點棘手。這似乎工作:

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

但這是有點iffy,因爲它是在webview的無證部分戳。如果蘋果決定重新安排子視圖,它可能會停止工作。

+1

我不能簡單地枚舉所有子視圖,檢查哪一個是scrollview的子類,並在所有適當的子視圖上使用上面的代碼? – Sascha 2010-11-14 06:25:10

+1

這裏是我做什麼(其甚至應該繼續即使蘋果決定重新排列子視圖):\t對(INT I = 0; I <[webView.subviews計數];我++) \t { \t \t ID子視圖= [webView.subviews objectAtIndex:i]; \t \t如果([子視圖isKindOfClass:[UIScrollView的類]]) \t \t { \t \t \t((的UIScrollView *)子視圖).scrollsToTop = NO; \t \t} \t} – Sascha 2010-11-14 14:28:26

+7

作爲iOS 5的的,的UIWebView的-scrollView屬性[露出](http://developer.apple.com/library/ios/documentation/uikit/reference/UIWebView_Class/Reference/Reference。 HTML#// apple_ref/OCC/instp/UIWebView中/滾動視圖)。 – 2012-10-22 16:48:32

3

很顯然,如果你有一個視圖控制器不止一個滾動視圖(你的情況的WebView和TableView中)時,「水龍頭狀態欄滾動到頂部」被禁用。

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

(馬特Drance是前者的iPhoneOS開發人員傳播者,目前的iOS開發的Rockstar)

0

我只是在NIB的tableview有這個問題。非常令人沮喪,直到我記得我以編程方式將UITextView添加爲表視圖標題。 scrollsToTop = NO在UITextView上做了詭計。

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

非常感謝!我無法找到問題,爲什麼我的tableview不滾動,因爲我只有兩個tableViews,只有一個啓用scrollToTop。使用這個函數,我發現有一個第三個滾動視圖,我將其添加爲一個子視圖。我完全忘了那個! :) 謝謝!!!! – 2012-06-21 12:52:13

+1

沒有想到UITextView計數。謝謝。 – 2013-03-25 00:04:45

+0

這對於查找有問題的子視圖非常有用,謝謝! – ebi 2013-10-16 19:44:29

0

在視圖的所有滾動視圖中設置scrollsToTop = NO,除了要滾動到頂部的滾動視圖之外。這有助於系統找到正確的滾動視圖。

1

我只是想補充這一點,如果你使用的是UITextView,它不是需要scrollsToTop調整子視圖,它的實際UITextView,總之你需要這個代碼:

[myTextView setScrollsToTop:FALSE]; 

這應該解決問題(另外,'disableScrollsToTopPropertyOnAllSubviewsOf'功能在UITextViews上不起作用)。

希望這可以幫助別人!

4

不知道蘋果在吸菸,但從設計上看,iPhone上的行爲與iPad明顯不同。 Apple's documentation不包括「特殊Condsideration」注意如下...

在iPhone上,滾動到頂部的姿態沒有效果,如果有更多的 比一個滾動屏幕上查看有scrollsToTop設爲是。

所以在iPhone上,你必須確保有永遠只能一個的UIScrollView(或的UITableView/UICollectionView/UIWebView的等),有它scrollsToTop = YES

由於scrollsToTop默認爲YES,因此您必須爲UIScrollView的顯式設置scrollsToTop = NO,您不想在用戶點擊狀態欄時進行滾動。

3

opyh的答案的迅捷變體。 Upvote他!

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) 
    } 
}