苹果间接地阻止在其屏幕中不断显示滚动指示器iOS 人机界面指南 http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/mobilehig/UIElementGuidelines/UIElementGuidelines.html#//apple_ref/doc/uid/TP40006556-CH13-SW30但指南只是有原因的指南,它们并不能解释所有情况,有时您可能需要礼貌地忽略它们。
任何内容视图的滚动指示器都是UIImageView
这些内容视图的子视图。这意味着您可以accessa 的滚动指示器UIScrollView
就像您对其任何其他子视图一样(即myScrollView.subviews
) and modify像任何滚动指示器一样UIImageView
(e.g. 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
最初记入这个来源 http://www.developers-life.com/scrollview-with-scrolls-indicators-which-are-shown-all-the-time.html.
这定义了一个类别UIImageView
为 alpha 属性定义自定义设置器。这是有效的,因为在底层代码的某个时刻UIScrollView
,它会将其滚动指示器的 alpha 属性设置为 0 以隐藏它。此时它将贯穿我们的类别,如果托管UIScrollView
有正确的标签,它将忽略正在设置的值,使其保持显示。
In order to use this solution ensure your UIScrollView
has the appropriate tag e.g.
如果您想从滚动指示器出现的那一刻起就显示它UIScrollView
可见,只需在视图出现时使滚动指示器闪烁即可。例如
- (void)viewDidAppear:(BOOL)animate
{
[super viewDidAppear:animate];
[self.scrollView flashScrollIndicators];
}
其他 SO 参考:
- UIScrollView - 显示滚动条 https://stackoverflow.com/questions/1888647/uiscrollview-showing-the-scroll-bar
- UIScrollView指示器总是显示? https://stackoverflow.com/questions/3290813/uiscrollview-indicator-always-show
- 滚动指示器可见性 https://stackoverflow.com/questions/6908095/scroll-indicators-visibility?lq=1
- 使滚动条在 uiscrollview 中始终可见 https://stackoverflow.com/questions/13562134/make-scrollbars-always-visible-in-uiscrollview?lq=1