我需要在viewDidLoad上始終顯示一個滾動條,以便用戶能夠理解有內容需要滾動。我做了以下內容:使滾動條在UIScrollView上始終可見?
[myscrollView flashScrollIndicators];
但隨後的滾動條只出現viewDidLoad中一段時間後,只有再次消失,當用戶觸摸屏幕再次出現..
我需要滾動條始終可見。我該怎麼做?
我需要在viewDidLoad上始終顯示一個滾動條,以便用戶能夠理解有內容需要滾動。我做了以下內容:使滾動條在UIScrollView上始終可見?
[myscrollView flashScrollIndicators];
但隨後的滾動條只出現viewDidLoad中一段時間後,只有再次消失,當用戶觸摸屏幕再次出現..
我需要滾動條始終可見。我該怎麼做?
蘋果間接地阻止不斷在他們的iOS Human Interface Guidelines顯示滾動指標,但指導原則是隻爲一個理由指引,他們不沒有考慮到每種情況,有時你可能需要禮貌地忽視它們。
任何內容視圖的滾動指標都是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
這是最初存入this source。
這爲UIImageView
定義了一個類別,用於定義alpha屬性的自定義設置器。這是可行的,因爲在UIScrollView
的底層代碼的某個時刻,它會將其滾動指示器的alpha屬性設置爲0以隱藏它。此時,它將貫穿我們的類別,並且如果託管UIScrollView
具有正確的標記,則它將忽略正在設置的值,並將其顯示。
爲了使用此解決方案,請確保您的UIScrollView
具有適當的標籤,例如
如果您希望從其UIScrollView
可見的時刻開始顯示滾動指示器,只需在視圖出現時閃動滾動指示器即可.e。摹
- (void)viewDidAppear:(BOOL)animate
{
[super viewDidAppear:animate];
[self.scrollView flashScrollIndicators];
}
其他SO引用:
我不知道這是否會起作用。但只是給你一個提示。
Scrollview內的滾動條是一個Imageview。這是UIScrollview的子視圖
因此,獲取UIscrollview的滾動條Imageview。然後嘗試設置圖像屬性隱藏NO或更改的Alpha值
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;
}
了參考從here
我想提供我的解決方案。我不喜歡最流行的變體與類別(在類別中重寫方法可能是一些不確定的原因,應該在運行時調用什麼方法,因爲有兩個方法具有相同的選擇器)。 我使用改頭換面。而且我也不需要使用標籤。
此方法添加到您的視圖控制器,在那裏你(在我的情況self.categoriesTableView
)的滾動視圖
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// Do swizzling to turn scroll indicator always on
// Search correct subview with 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;
}
}
}
}
}
// 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
的滾動指示(垂直滾動指示)將永遠在屏幕上。
使用iOS 10,這可以工作。如果你想設置水平滾動條,使用:UIViewAutoresizing.flexibleTopMargin(Swift 3.0)或UIViewAutoresizingFlexibleTopMargin(Obj-C) –
在iOS 11中工作得很好。需要#include
Cudnt瞭解你,滾動顯示是否觸摸?另外滾動條如何消失?你有沒有放一個計時器,或者你打算去下一個視圖然後回來? – IronManGill
是滾動視圖出現在touch.when我使用[myscrollView flashScrollIndicators];它們出現在viewLoad上,然後在幾秒鐘後消失了。我想讓它們一直可見..不,我不會來回走動。 – Honey
檢查了這一點 http://stackoverflow.com/questions/3290813/uiscrollview-indicator-always-show – Divya