スクロールするコンテンツがあることをユーザーが理解できるように、viewDidLoad でスクロールバーを常に表示する必要があります。私は次のことをしました:
[myscrollView flashScrollIndicators];
しかし、スクロールバーはviewDidLoadの後しばらくの間だけ表示され、ユーザーが画面に触れたときにのみ再び表示されなくなります..
スクロールバーを常に表示する必要があります。どうすればいいですか?
スクロールするコンテンツがあることをユーザーが理解できるように、viewDidLoad でスクロールバーを常に表示する必要があります。私は次のことをしました:
[myscrollView flashScrollIndicators];
しかし、スクロールバーはviewDidLoadの後しばらくの間だけ表示され、ユーザーが画面に触れたときにのみ再び表示されなくなります..
スクロールバーを常に表示する必要があります。どうすればいいですか?
Apple は、 iOS ヒューマン インターフェイス ガイドラインでスクロール インジケーターを常に表示することを間接的に思いとどまらせていますが、ガイドラインは単なるガイドラインにすぎません。
コンテンツ ビューのスクロール インジケーターは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
元々はこの情報源にクレジットされています。
UIImageView
これは、alpha プロパティのカスタム セッターを定義するカテゴリを定義します。これが機能するのは、 の基になるコードのある時点で、UIScrollView
スクロール インジケータの alpha プロパティを 0 に設定して非表示にするためです。この時点で、カテゴリが実行され、ホスティングUIScrollView
に適切なタグがあれば、設定されている値が無視され、表示されたままになります。
このソリューションを使用するにUIScrollView
は、適切なタグがある
ことを確認してください。
表示された瞬間からスクロール インジケーターを表示したい場合UIScrollView
は、ビューが表示されたときにスクロール インジケーターを点滅させるだけです。
- (void)viewDidAppear:(BOOL)animate
{
[super viewDidAppear:animate];
[self.scrollView flashScrollIndicators];
}
追加の SO 参照:
これがうまくいくかどうかはわかりません。しかし、あなたへのヒントにすぎません。
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;
}
ここから参照を得ました