我需要在viewDidLoad上始终显示一个滚动条,以便用户能够理解有内容需要滚动。我做了以下内容:使滚动条在UIScrollView上始终可见?
[myscrollView flashScrollIndicators];
但随后的滚动条只出现viewDidLoad中一段时间后,只有再次消失,当用户触摸屏幕再次出现..
我需要滚动条始终可见。我该怎么做?
我需要在viewDidLoad上始终显示一个滚动条,以便用户能够理解有内容需要滚动。我做了以下内容:使滚动条在UIScrollView上始终可见?
[myscrollView flashScrollIndicators];
但随后的滚动条只出现viewDidLoad中一段时间后,只有再次消失,当用户触摸屏幕再次出现..
我需要滚动条始终可见。我该怎么做?
苹果间接地阻止不断在他们的iOS Human Interface Guidelines显示滚动指标,但指导原则是只为一个理由指引,他们不没有考虑到每种情况,有时你可能需要礼貌地忽视它们。
任何内容视图的滚动指标都是UIImageView
这些内容视图的子视图。这意味着可以访问一个UIScrollView
的滚动指标作为你将任何其另一子视图(即myScrollView.subviews
)和的修改滚动指标,就像任何UIImageView
(例如scrollIndicatorImageView.backgroundColor = [UIColor redColor];
)。
最流行的解决方案似乎是下面的代码:
#define noDisableVerticalScrollTag 836913
#define noDisableHorizontalScrollTag 836914
@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
这是最初存入this source。
这为UIImageView
定义了一个类别,用于定义alpha属性的自定义设置器。这是可行的,因为在UIScrollView
的底层代码的某个时刻,它会将其滚动指示器的alpha属性设置为0以隐藏它。此时,它将贯穿我们的类别,并且如果托管UIScrollView
具有正确的标记,则它将忽略正在设置的值,并将其显示。
为了使用此解决方案,请确保您的UIScrollView
具有适当的标签,例如
如果您希望从其UIScrollView
可见的时刻开始显示滚动指示器,只需在视图出现时闪动滚动指示器即可.e。摹
- (void)viewDidAppear:(BOOL)animate
{
[super viewDidAppear:animate];
[self.scrollView flashScrollIndicators];
}
其他SO引用:
我不知道这是否会起作用。但只是给你一个提示。
Scrollview内的滚动条是一个Imageview。这是UIScrollview的子视图
因此,获取UIscrollview的滚动条Imageview。然后尝试设置图像属性隐藏NO或更改的Alpha值
static const int UIScrollViewHorizontalBarIndexOffset = 0;
static const int UIScrollViewVerticalBarIndexOffset = 1;
-(UIImageView *)scrollbarImageViewWithIndex:(int)indexOffset
{
int viewsCount = [[yourScrollview subviews] count];
UIImageView *scrollBar = [[yourScrollview subviews] objectAtIndex:viewsCount - indexOffset - 1];
return scrollBar;
}
-(void) viewDidLoad
{
//Some Code
//Get Scrollbar
UIImageView *scrollBar = [self scrollbarImageViewWithIndex: UIScrollViewVerticalBarIndexOffset];
//The try setting hidden property/ alpha value
scrollBar.hidden=NO;
}
了参考从here
我想提供我的解决方案。我不喜欢最流行的变体与类别(在类别中重写方法可能是一些不确定的原因,应该在运行时调用什么方法,因为有两个方法具有相同的选择器)。 我使用改头换面。而且我也不需要使用标签。
此方法添加到您的视图控制器,在那里你(在我的情况self.categoriesTableView
)的滚动视图
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// Do swizzling to turn scroll indicator always on
// Search correct subview with scroll indicator image across tableView subviews
for (UIView * view in self.categoriesTableView.subviews) {
if ([view isKindOfClass:[UIImageView class]]) {
if (view.alpha == 0 && view.autoresizingMask == UIViewAutoresizingFlexibleLeftMargin) {
if (view.frame.size.width < 10 && view.frame.size.height > view.frame.size.width) {
if (self.categoriesTableView.frame.size.height < self.categoriesTableView.contentSize.height) {
// Swizzle class for found imageView, that should be scroll indicator
object_setClass(view, [AlwaysOpaqueImageView class]);
break;
}
}
}
}
}
// Ask to flash indicator to turn it on
[self.categoriesTableView flashScrollIndicators];
}
在这种情况下,添加新的类
@interface AlwaysOpaqueImageView : UIImageView
@end
@implementation AlwaysOpaqueImageView
- (void)setAlpha:(CGFloat)alpha {
[super setAlpha:1.0];
}
@end
的滚动指示(垂直滚动指示)将永远在屏幕上。
使用iOS 10,这可以工作。如果你想设置水平滚动条,使用:UIViewAutoresizing.flexibleTopMargin(Swift 3.0)或UIViewAutoresizingFlexibleTopMargin(Obj-C) –
在iOS 11中工作得很好。需要#include
Cudnt了解你,滚动显示是否触摸?另外滚动条如何消失?你有没有放一个计时器,或者你打算去下一个视图然后回来? – IronManGill
是滚动视图出现在touch.when我使用[myscrollView flashScrollIndicators];它们出现在viewLoad上,然后在几秒钟后消失了。我想让它们一直可见..不,我不会来回走动。 – Honey
检查了这一点 http://stackoverflow.com/questions/3290813/uiscrollview-indicator-always-show – Divya