是否有一种通知用户UITableView可滚动的典型方法?

时间:2014-01-21 17:38:56

标签: ios objective-c uiscrollview

使用分组表返回iOS 7之前的版本,用户很容易判断UITableView是否有更多内容需要滚动到其中。但是,现在显示表格的方式,如果表格显示了所有数据,或者隐藏了更多隐藏的数据,用户需要滚动到该数据才能看到它,这似乎很难提前知道。

是否有一种典型的方式通知用户表格中的内容多于显示的内容?如果没有,有没有人对我如何做到这一点有任何想法?我之前已经看过它会出现一个浮动箭头叠加层,如果它可以在给定的位置滚动,它将出现在表格的一侧方向,但我认为这是在Windows或Android设备上,我不记得曾经在iOS设备上看到它。我还发现了this question concerning always showing the scroll bar,但是那里的答案要么是不可能的,要么评论表明它们实施起来很差。有没有人想出一个好办法呢?

编辑:为了澄清,我正在开发iPad,在一个UIViewController中并排嵌入多个小桌子,这有点不典型,所以很多快速技巧都行不通。其中一些表需要滚动才能显示其所有内容,有些表的大小将使所有内容始终可见。由于每个屏幕都有很多内容,我需要一种永久的方式来指示表格可以滚动,因为我不希望我的用户错过它。

3 个答案:

答案 0 :(得分:4)

我见过的一个很好的模式是在表格视图出现后调用-flashScrollIndicators。这为用户提供了滚动可以做某事的可视指示,同时不需要对表视图的绘图进行任何永久性修改。

答案 1 :(得分:0)

我尝试在我的应用程序中使用更自然的方法,那就是调整单元格的大小,使表格中的最后一个可见单元格“切断”。理想情况下,最好是在文本或图像之间切断,以便用户立即了解有更多,但有时很难做到,特别是如果您实现动态文本大小调整。

Example

当然,现代用户大多熟悉滚动,因此通常不需要指示。

这是另一个更自然的方式让他们知道有更多内容的例子。请注意,不仅底部的字母被切掉,而且顶部还有很多空间;这提供了一个进一步的视觉指示,即文本可以滚动到负空间以显示更多内容。

Example 2

答案 2 :(得分: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属性,因此该标记不能用于其他任何内容,这对某些人来说可能是一个问题。