您好,登錄后才能下訂單哦!
最近在做一個應用的時候,被要求將UIScrollView的滾動條一直顯示。
查了一下UIScrollView的方法和屬性,發現沒有相應的方法,只有一個flashScrollIndicators相對靠譜點,但是他只會顯現滾動條一小段時間,然后會自動消失。我總不能起一個定時器,一直在刷這個方法吧。
在stackoverflow上搜索了一下,最后的解決方案指向這個頁面。
貼出源代碼如下:
- #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
總結一下這個方法的原理:
1)UIScrollView的滾動條是UIImageView
2)UIScrollView被flashScrollIndicators后,過一段時間,他的滾動條就會被調用setAlpha方法
3)由于是通過UIImageView的Category實現的,所以對UIImageView的影響是全局的,所以這個方法通過設置UIScrollView的tag來決定當前UIImageView是不是被影響到的UIImageView
4)如果你希望橫向滾動條一直存在,只需要將UIScrollView的tag設置成代碼中的noDisableVerticalScrollTag就可以了,然后調用flashScrollIndicators就可以了,不需要手動調用setAlpha的代碼,原因見第二點。
這個是網上的參考方案,你可以根據自己的需求進行修改。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。