25

スクロールするコンテンツがあることをユーザーが理解できるように、viewDidLoad でスクロールバーを常に表示する必要があります。私は次のことをしました:

[myscrollView flashScrollIndicators];

しかし、スクロールバーはviewDidLoadの後しばらくの間だけ表示され、ユーザーが画面に触れたときにのみ再び表示されなくなります..

スクロールバーを常に表示する必要があります。どうすればいいですか?

4

4 に答える 4

20

Apple は、 iOS ヒューマン インターフェイス ガイドラインでスクロール インジケーターを常に表示することを間接的に思いとどまらせていますが、ガイドラインは単なるガイドラインにすぎません。

コンテンツ ビューのスクロール インジケーターはUIImageView、それらのコンテンツ ビューのサブビューです。これは、他のサブビューと同じように (つまり)のスクロール インジケーターにアクセスし、他のサブビューと同じように(例えば)スクロール インジケーターを変更できることを意味します。UIScrollViewmyScrollView.subviewsUIImageViewscrollIndicatorImageView.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

元々はこの情報源にクレジットされています。

UIImageViewこれは、alpha プロパティのカスタム セッターを定義するカテゴリを定義します。これが機能するのは、 の基になるコードのある時点で、UIScrollViewスクロール インジケータの alpha プロパティを 0 に設定して非表示にするためです。この時点で、カテゴリが実行され、ホスティングUIScrollViewに適切なタグがあれば、設定されている値が無視され、表示されたままになります。

このソリューションを使用するにUIScrollViewは、適切なタグがある ことを確認してください。鬼ごっこ

表示された瞬間からスクロール インジケーターを表示したい場合UIScrollViewは、ビューが表示されたときにスクロール インジケーターを点滅させるだけです。

- (void)viewDidAppear:(BOOL)animate
{
    [super viewDidAppear:animate];
    [self.scrollView flashScrollIndicators];
}

追加の SO 参照:

于 2013-03-25T11:31:54.760 に答える
0

これがうまくいくかどうかはわかりません。しかし、あなたへのヒントにすぎません。

Scrollview内のスクロールバーはImageviewです。これはUIScrollviewのサブビューです

したがって、UIscrollviewのScrollbarImageviewを取得します。次に、その画像プロパティを非表示に設定するか、アルファ値を変更してみてください

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;
}

ここから参照を得ました

于 2012-12-04T06:43:29.240 に答える