使用分组表返回iOS 7之前的版本,用户很容易判断UITableView
是否有更多内容需要滚动到其中。但是,现在显示表格的方式,如果表格显示了所有数据,或者隐藏了更多隐藏的数据,用户需要滚动到该数据才能看到它,这似乎很难提前知道。
是否有一种典型的方式通知用户表格中的内容多于显示的内容?如果没有,有没有人对我如何做到这一点有任何想法?我之前已经看过它会出现一个浮动箭头叠加层,如果它可以在给定的位置滚动,它将出现在表格的一侧方向,但我认为这是在Windows或Android设备上,我不记得曾经在iOS设备上看到它。我还发现了this question concerning always showing the scroll bar,但是那里的答案要么是不可能的,要么评论表明它们实施起来很差。有没有人想出一个好办法呢?
编辑:为了澄清,我正在开发iPad,在一个UIViewController
中并排嵌入多个小桌子,这有点不典型,所以很多快速技巧都行不通。其中一些表需要滚动才能显示其所有内容,有些表的大小将使所有内容始终可见。由于每个屏幕都有很多内容,我需要一种永久的方式来指示表格可以滚动,因为我不希望我的用户错过它。
答案 0 :(得分:4)
我见过的一个很好的模式是在表格视图出现后调用-flashScrollIndicators
。这为用户提供了滚动可以做某事的可视指示,同时不需要对表视图的绘图进行任何永久性修改。
答案 1 :(得分:0)
我尝试在我的应用程序中使用更自然的方法,那就是调整单元格的大小,使表格中的最后一个可见单元格“切断”。理想情况下,最好是在文本或图像之间切断,以便用户立即了解有更多,但有时很难做到,特别是如果您实现动态文本大小调整。
当然,现代用户大多熟悉滚动,因此通常不需要指示。
这是另一个更自然的方式让他们知道有更多内容的例子。请注意,不仅底部的字母被切掉,而且顶部还有很多空间;这提供了一个进一步的视觉指示,即文本可以滚动到负空间以显示更多内容。
答案 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
之前调用{所以不在viewDidLoad
或viewWillAppear
- 它看起来如果表还没有显示它们就不能闪现。)
此方法有效,但它会占用表的.tag
属性,因此该标记不能用于其他任何内容,这对某些人来说可能是一个问题。