UITableView 一直顯示滾動條(ScrollBar Indicators)、滾動條Width(寬度)、滾動條Color(顏色)


在 IOS 中,對 UIScrollView 的滾動條(ScrollBar Indicators)的自定義設置接口,一直都是很少的。除了能自定義簡單的樣式(UIScrollViewIndicatorStyle)和是否啟用外,對於 一直顯示滾動條、自定義滾動條(ScrollBar Indicators)的Width 、顏色等,都是不能很方便的設置的。 雖然不能很方便,但是還是能實現的。通過一天的努力,不斷的 google 和 overflow,終於找到了幾個比較完美的解決辦法。

本文禁止任何網站轉載,嚴厲譴責那些蛀蟲們。
本文首發於,博客園,請搜索:博客園 - 尋自己,查看原版文章
本文首發地址:UITableView 一直顯示滾動條(ScrollBar Indicators)、滾動條Width(寬度)、滾動條Color(顏色) - http://www.cnblogs.com/xunziji/p/3248850.html

  

下面先來一步步的分析:

 
1. 那些控件可以設置滾動條(ScrollBar Indicators)

因為UIScrollView 是 UITableView 和 UITextView 的父類,所以可以設置的Controll: UIScrollView, UITableView, UITextView.

 

2. UIScrollView 的 - (void)flashScrollIndicators 方法

該方法是調用 object-c 方法顯示 UIScrollView 的滾動條(ScrollBar Indicators)。但是悲劇的是滾動條(ScrollBar Indicators) 只會顯示大概1.5秒左右的時間,就會自動隱藏。 不過該方法還是有一定的應用場景,比如你認為只要在 UIScrollView Load 的時間,右側顯示2秒的滾動條就能起到提示作用,那這個方法剛好滿足你: [tableProdList reloadData]; if (tableProdList.contentSize.height > tableProdList.frame.size.height){ tableProdList flashScrollIndicators]; }

 

3. 滾動條(ScrollBar Indicators)是什么東西、是如何顯示和隱藏掉的

UIScrollView 的 滾動條(ScrollBar Indicators),就是默認右側的 darkgray 條,當你滾動一個 UIScrollView 的時間,這個滾動條就會顯示,並且顯示和隱藏都是淡入和淡出的。 這是,你或許就能猜到是什么了:UIImageView. 滾動條就是一個UIImageView,那個滾動條就是一個圖片而已。而滾動條的消失、隱藏淡入淡出,都是設置的 UIImageView的 -(void) setAlpha 方法。

 

本文禁止任何網站轉載,嚴厲譴責那些蛀蟲們。
本文首發於,博客園,請搜索:博客園 - 尋自己,查看原版文章
本文首發地址:UITableView 一直顯示滾動條(ScrollBar Indicators)、滾動條Width(寬度)、滾動條Color(顏色) - http://www.cnblogs.com/xunziji/p/3248850.html
4. 讓滾動條一直顯示 的第一種方法(如果你要快速解決問題,請直接看最后一種更完美、更快速的解決辦法)

在 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

 

剛看到這段代碼的時間,我想:這什么叼毛代碼,我要設置 UIScrollView , 你卻設置 UIImageView; 我要設置 ScrollBar Indicators,你卻設置 alpha。況且這段代碼要怎么用,我靠,原文就貼出來了這段代碼,連解釋都沒有。結果害我走了好多彎路,豈不知,這段代碼就能很完美的解決。

 

首先要解釋下這段代碼,不然被其他苦逼的、熬夜的、加班的程序猿看到了,也不會用,我豈不是要被罵了?:

 

a. 這是一個 Category Objective-C提供了一個非常靈活的類(Class)擴展機制-類別(Category)。類別用於對一個已經存在的類添加方法(Methods)。你只需要知道這個類的公開接口,不需要知道類的源代碼。需要注意的是,類別不能為已存在的類添加實例變量(Instance Variables)。 所以這段代碼是繼承了 UIImageView 類,並重寫了 setAlpha 方法。關於如何把這段代碼添加到項目中,見下圖:

 

b. 該方法使用 Tag 來確定是否需要一直顯示滾動條 因為該方法重寫了 setAlpha,所以所有的 UIImageView 在加載的時間都會請求這段代碼的,這世間不可能每個都處理,所以,通過 Controller 的Tag 來區分,也是不錯的選擇。當然,這里是比較 Tag 是否相等,你也可以比較 Tag 是否大於某個值等等。

c. 通過一些列的 if 比較,確定該 UIScrollView :是水平還是垂直的滾動條、該 UIImageView 是否是想要隱藏 和 UIScrollView 的正文內容區域是否溢出來確定是否要隱藏,即是否要設置:[super setAlpha:0];

d. 如果執行 [super setAlpha:0],則隱藏,return 就繼續顯示

 

使用方法:

a. 按照圖片中,建立 Category ,並把代碼 Copy 進去

 

b. 在 viewDidLoad 內:

//一直顯示滾動條
prodDetailsTable.tag = 836913;

 

c. 要在 UIScrollView 數據綁定后,即加載完成后:flashScrollIndicators

//重新綁定數據 
[prodDetailsTable reloadData];
[prodDetailsTable flashScrollIndicators];

 

 

本文禁止任何網站轉載,嚴厲譴責那些蛀蟲們。
本文首發於,博客園,請搜索:博客園 - 尋自己,查看原版文章
本文首發地址:UITableView 一直顯示滾動條(ScrollBar Indicators)、滾動條Width(寬度)、滾動條Color(顏色) - http://www.cnblogs.com/xunziji/p/3248850.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM