Ответ 1
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
он будет устанавливать свой собственный атрибут альфа-характеристики прокрутки в 0, чтобы скрыть его. На этом этапе он будет проходить через нашу категорию, и если хостинг UIScrollView
имеет правильный тег, он будет игнорировать заданное значение, оставив его отображаемым.
Чтобы использовать это решение, убедитесь, что ваш UIScrollView
имеет соответствующий тег, например.
Если вы хотите отобразить индикатор прокрутки с момента видимости его UIScrollView
, просто запустите индикаторы прокрутки, когда появится представление .e.g
- (void)viewDidAppear:(BOOL)animate
{
[super viewDidAppear:animate];
[self.scrollView flashScrollIndicators];
}
Дополнительные ссылки SO: