UIScrollView - 显示滚动条

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIScrollView - 显示滚动条相关的知识,希望对你有一定的参考价值。

可能是一个简单的!

有谁知道如何让UIScrollView的滚动条不断显示?

它在用户滚动时显示,因此他们可以看到它们所在的滚动视图的位置。

但是我希望它能够不断显示,因为用户不会立即明白滚动是否可用

任何建议都将受到高度赞赏。

答案

不,你不能让它们总是显示,但你可以让它们暂时闪现。

[myScrollView flashScrollIndicators];

它们是滚动指示器,而不是滚动条。您无法使用它们滚动。

另一答案

my solution一直用于显示滚动指示器

#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

更新:此解决方案导致64位的一些问题。有关更多细节,请查看here

另一答案

据我所知,这是不可能的。控制显示滚动指示器的唯一API调用是showsVerticalScrollIndicator,它只能禁用显示指示符。

当视图出现时,您可以使用flashScrollIndicators,以便用户知道它们在滚动视图中的位置。

另一答案

这个对我有用:

#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

另一答案

我想提供我的解决方案。我不喜欢带有类别的最流行的变体(类别中的重写方法可能是一些不确定的原因,应该在运行时调用哪个方法,因为有两个方法使用相同的选择器)。我改用了调皮。而且我也不需要使用标签。

将此方法添加到视图控制器,您可以在其中具有滚动视图(self.categoriesTableView属性是一个表格视图,我想在其中显示滚动条)

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    // Do swizzling to turn scroll indicator always on
    // Search correct subview with vertical 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;
                    }
                }
            }
        }
    }
    // Search correct subview with horizontal scroll indicator image across tableView subviews
    for (UIView * view in self.categoriesTableView.subviews) {
        if ([view isKindOfClass:[UIImageView class]]) {
            if (view.alpha == 0 && view.autoresizingMask == UIViewAutoresizingFlexibleTopMargin) {
                if (view.frame.size.height < 10 && view.frame.size.height < view.frame.size.width) {
                    if (self.categoriesTableView.frame.size.width < self.categoriesTableView.contentSize.width) {
                        // 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

滚动指示器(第一个for循环中的垂直滚动指示器和第二个for循环中的水平)将始终位于屏幕上。如果您只需要一个指标,请在代码中仅留下此for循环并删除另一个。

另一答案

对于webview,其中第一个子视图是滚动视图,在最新的SDK中,如果html页面比框架长,则不显示滚动条,如果html内容恰好与框架对齐,或者您有空白在框架的底部,它“看起来”就像没有需要滚动而在线下没有任何东西。在这种情况下,我认为你应该肯定地闪烁代表的滚动条

- (void)webViewDidFinishLoad:(UIWebView *)webView; 

提醒用户“盒子外面有更多东西”的方法。

NSArray *subViews = [[NSArray alloc] initWithArray:[webView subviews]] ;
UIScrollView *webScroller = (UIScrollView *)[subViews objectAtIndex:0] ;    

使用HTML,水平内容会自动换行,因此请检查webscroller高度。

        if (webScroller.contentSize.height > webView.frame.size.height) {
            [webScroller flashScrollIndicators];
        }

闪存是如此之短,并且在视图加载时发生,它可以被忽略。要解决这个问题,您还可以通过通用UIView commitAnimations进行微动或反弹,滚动或缩放内容。

另一答案

ios不提供API。但是如果你真的想要这个,你可以添加自定义指标来滚动视图并自己进行布局,就像演示一样:

- (void)layoutSubviews
{
    [super layoutSubviews];

    if (self.showsVerticalScrollIndicatorAlways) {
        scroll_indicator_position(self, k_scroll_indicator_vertical);
    }

    if (self.showsHorizontalScrollIndicatorAlways) {
        scroll_indicator_position(self, k_scroll_indicator_horizontal);
    }
}

链接是https://github.com/flexih/MazeScrollView

另一答案

ScrollBar的功能就像iOS内置的一样,但你可以搞乱颜色和宽度。

-(void)persistantScrollBar
{
    [persistantScrollBar removeFromSuperview];
    [self.collectionView setNeedsLayout];
    [self.collectionView layoutIfNeeded];

    if (self.collectionView.contentSize.height &g

以上是关于UIScrollView - 显示滚动条的主要内容,如果未能解决你的问题,请参考以下文章

如何永久显示 UIScrollView 滚动条而不仅仅是闪烁?

UIScrollView 无法正常工作(它返回顶部并且不显示任何滚动条

第十篇让UIScrollView的滚动条常显

UIScrollView 中的滚动条大小异常行为

UIScrollView

0130——UIScrollView