2014-01-21 21 views
1

回到iOS 7之前的分組表格中,用戶很容易判斷UITableView是否有更多需要滾動的內容。儘管現在顯示錶格的方式很難預先知道表格是顯示所有數據,還是隱藏了更多數據,用戶需要滾動才能看到數據。有沒有一種通知用戶UITableView可滾動的典型方法?

是否有一種通知用戶表格中的內容比顯示內容更多的典型方法?如果沒有,有沒有人有任何想法我可以做到這一點?我以前見過它會出現浮動箭頭疊加,如果它可以在給定方向上滾動,它會出現在桌面上,但我認爲它在Windows或Android設備上,不要忘了在iOS設備上看到它。我也發現this question concerning always showing the scroll bar,但是那裏的答案要麼是不可能的,要麼是評論表明它們實施得不好。有沒有人想出了一個很好的方法來做到這一點?

編輯:只是爲了澄清,我在iPad上開發了多個小桌子並排嵌入一個UIViewController,這是有點不典型,所以很多快速技巧將無法正常工作。其中一些表格需要滾動以顯示其所有內容,其中一些表格的大小將使所有內容始終可見。由於每個屏幕上都有這麼多事情發生,我需要一種永久的方式來指示表格可以滾動,因爲我不希望我的用戶錯過它。

+0

您可能只佔很少百分比的用戶,他們在看到UITableView時可能不知道上下滾動。我有時必須在我的應用程序中這樣做,如果其中一個選項深入到分組的tableview中。我通常在他們第一次安裝我的應用時使用UIAlertView告訴他們。簡單而簡單。 –

+0

@SamBudda:我的屏幕中嵌入了很多表格,其中一些表格的大小使得它們永遠不需要滾動。其他人需要滾動。我想要一個簡單的方法讓我的用戶知道哪個是哪個。 – GeneralMike

回答

0

現在我要去與SAKrisT的方法from this question。它在UIImageView上創建了一個類別,UIScrollView上的滾動條是子類。

的類別:

//.h 
#define noDisableVerticalScrollTag 836913 
#define noDisableHorizontalScrollTag 836914 

//.m 
@implementation UIImageView (ForScrollView) 

- (void) setAlpha:(float)alpha { 

    if (self.superview.tag == noDisableVerticalScrollTag) { 
     if (alpha == 0 && self.autoresizingMask == UIViewAutoresizingFlexibleLeftMargin) { 
      if (self.frame.size.width < 10 && self.frame.size.height > self.frame.size.width) { 
       UIScrollView *sc = (UIScrollView*)self.superview; 
       if (sc.frame.size.height < sc.contentSize.height) { 
        return; 
       } 
      } 
     } 
    } 

    if (self.superview.tag == noDisableHorizontalScrollTag) { 
     if (alpha == 0 && self.autoresizingMask == UIViewAutoresizingFlexibleTopMargin) { 
      if (self.frame.size.height < 10 && self.frame.size.height < self.frame.size.width) { 
       UIScrollView *sc = (UIScrollView*)self.superview; 
       if (sc.frame.size.width < sc.contentSize.width) { 
        return; 
       } 
      } 
     } 
    } 

    [super setAlpha:alpha]; 
} 
@end 

要使用此功能,在保持表的的viewController代碼:

#import "UIImageView+ForScrollView.h" 
// ... Stuff ... 
- (void) viewDidAppear 
{ 
    [super viewDidAppear]; 

    myTableView.tag = noDisableVerticalScrollTag; 
    [myTableView flashScrollIndicators]; 
    // ... Stuff ... 
} 
// ... Stuff ... 

注意myTableView.tag可以在任何地方設置,但[myTableView flashScrollIndicators];有被稱爲不早於viewDidAppear(所以不在viewDidLoadviewWillAppear - 它似乎如果表尚未顯示它們不能閃現)。

此方法可行,但它綁定了表的.tag屬性,因此標記不能用於其他任何內容,這對某些人可能是個問題。

+0

以上代碼 在iOS 64位設備上創建問題。如果我正在使用此類catergory圖像,則不會在iOS 64位設備上顯示或加載視圖。使用本機objective-c或swift方法 - : [tableView flashScrollIndicators] 將此代碼添加到viewWillAppear或viewDidAppear中。 瞭解更多關於FlashScrollIndicators的信息 - https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIScrollView_Class/index.html#//apple_ref/doc/uid/TP40006922-CH3-SW35 – Deepak

3

我看到的一個很好的模式是在表格視圖出現後調用-flashScrollIndicators。這給用戶一個視覺指示,即滾動會做一些事情,而不需要對錶格視圖的圖形進行永久修改。

+0

是的,這就是我鏈接的問題中的大部分建議。我正在尋找永久的東西。我正在開發一款iPad應用程序,並且在不同的地方顯示了很多信息,所以如果我只刷一次,用戶可能會錯過它。我可以在一段時間內閃動它,但這會在一段時間後變得煩人。 – GeneralMike

0

我嘗試在我的應用程序中使用更自然的方法,那就是調整我的單元格大小,使表格中最後一個可見單元格被「切斷」。理想情況下,最好是在文本或圖像之間切斷,以便用戶立即瞭解更多內容,但有時很難做到,尤其是在實現動態文本大小調整的情況下。

Example

當然,現代的用戶大多熟悉滾動所以常常沒有指標是必要的。

下面是另一個更自然的方式讓他們知道有更多內容的例子。請注意,信件不僅在底部被切斷,而且頂部也有很多空間;這給出了一個進一步的視覺指標,可以將文本滾動到負面空間以顯示更多。

Example 2

+1

它是一種很好的方法,但不能保證。 iPhone 4或iPad的屏幕尺寸如何? –

+0

是的,我想要嘗試這樣做,但我的一些細胞將具有非默認高度,對於某些表格,不同的細胞甚至可能具有不同的高度。所以試圖重新調整我的表格大小,以便一些內容流失會非常快速地變得非常混亂。我需要一個更好的方法。 – GeneralMike

相關問題