前言
最近剛好遇到這么一個(gè)需求,當(dāng)列表數(shù)據(jù)超過(guò)列表高度的時(shí)候惋耙,需要顯示滾動(dòng)條措近。
目前,UItableview無(wú)法一直顯示滾動(dòng)條始藕,只有當(dāng)用戶(hù)往下拉會(huì)出現(xiàn)滾動(dòng)條蒲稳,后面會(huì)自動(dòng)消失。無(wú)法滿(mǎn)足用戶(hù)需求伍派。
網(wǎng)上搜索一番江耀,解決方案主要有兩種,第一诉植,自定義view祥国,監(jiān)聽(tīng)滾動(dòng),添加自定義滾動(dòng)條晾腔;第二舌稀,重寫(xiě)UIImageView分類(lèi),重新setAlpha方法灼擂。第一種壁查,確定可以實(shí)現(xiàn),但是看著和操作不如自帶的自然順暢剔应,放棄睡腿;第二種,會(huì)出現(xiàn)其他圖片顯示不出來(lái)峻贮。百思不得其解席怪,果斷放棄。
實(shí)現(xiàn)
靈光一現(xiàn)月洛,從第二種方法何恶,知道UIScrollView 的 滾動(dòng)條(ScrollBar Indicators),就是默認(rèn)右側(cè)的 darkgray 條嚼黔,當(dāng)你滾動(dòng)一個(gè) UIScrollView 的時(shí)間细层,這個(gè)滾動(dòng)條就會(huì)顯示惜辑,并且顯示和隱藏都是淡入和淡出的。 這是疫赎,你或許就能猜到是什么了:UIImageView. 滾動(dòng)條就是一個(gè)UIImageView盛撑,那個(gè)滾動(dòng)條就是一個(gè)圖片而已。而滾動(dòng)條的消失捧搞、隱藏淡入淡出抵卫,都是設(shè)置的 UIImageView的 -(void) setAlpha 方法。但是分類(lèi)會(huì)影響所有的UIImageView類(lèi)胎撇,那就單獨(dú)獲取UITableView的UIImageView進(jìn)行二次改造介粘。這種做法,其實(shí)很常見(jiàn)晚树,例如改變searchbar的相關(guān)屬性姻采,uilaterview的標(biāo)題屬性等等。二話(huà)不說(shuō)爵憎,看下面代碼慨亲。
- (void)layoutSubviews{
[super layoutSubviews];
[self.subviews enumerateObjectsUsingBlock:^( id obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isKindOfClass:[UIImageView class]]) {
UIImageView * imageView = [[UIImageView alloc] init];
imageView = obj;
imageView.alpha = 1 ;
}
}];
UIView * view = [self.subviews lastObject];
if (view.top < 0) {
view.top = 0;
}
}
1、建立一個(gè)UItableview的分類(lèi)宝鼓,重寫(xiě)layoutSubviews
2刑棵、遍歷查詢(xún)出UIImageView,設(shè)置透明度為1
3愚铡、設(shè)置UIImageView的x為0(讓滾動(dòng)條顯示)
以上設(shè)置這樣就可以永遠(yuǎn)顯示自帶滾動(dòng)條蛉签,你可以根據(jù)需求設(shè)置什么時(shí)候顯示,什么時(shí)候不顯示茂附。具體還是看需求正蛙,這里提示這樣一種解決方案。
源碼
上述是主要流程营曼,完整的源碼可以通過(guò)以下方式獲取
https://github.com/huangkunhe/UITableViewDemo
小結(jié)
謝謝以下博主提供的思路
https://www.cnblogs.com/xunziji/p/3248850.html
http://www.reibang.com/p/85ca51a22609