1. 程式人生 > >自定義UITableViewCell分割線不顯示或粗細不同的原因

自定義UITableViewCell分割線不顯示或粗細不同的原因

由於系統預設的UITableView的下劃線在自定義的時候並不方便。系統有一個方法

tableview setSeparatorInset:inset

可以修改分割線的起始和終止位置,但是對分割線的粗細和顏色還是無法隨心所欲的修改。
因此我們通常採用自定義一個UITableViewCell的方法來模擬系統提供的分割線。
實現思路如下:首先建立一個繼承自UITableViewCell的子類,並在這個類的view的底部建立一個UIView,將view的高度設為很小的數值,顏色改為黑色(深灰色),從而偽裝成一條線。
最近使用這種方法遇到一個問題,首先是如果一個cell裡面有幾條線,可能會在某種機型的某個cell中,出現有的線畫不出來的情況。並且在所以機型上,滑動tableview的時候,自定義的分割線粗細會發生變化,有時候粗,有時候會變細。
搜遍了stackoverflow也沒有找到原因所在(英語太渣),嘗試了好久之後大概摸索出了一些。首先,不能為了追求細線的效果,而把uiview的高度設定的太小。推薦高度至少是0.5-1左右。
比如可以這樣建立separator:

UIView *separator = [[UIView alloc]initWithFrame:CGRectMake(0   cell.height,cell.width,0.5);

如果separator的高度太低,可能造成無法繪製到螢幕上的bug。同樣的原因,在滑動的過程中,由於UITableView的重繪,也會造成粗細上的偏差,其實這個偏差在任何時候都會存在,只是因為自定義的separator太細,導致偏差會大幅度的影響使用者的視覺效果。
沒有想到有效的解決辦法,不過總結了幾點可能改善使用者體驗技巧:
1.不要使用UIView的子類(如UIImageView)去繪製separator,這樣會降低繪製效率。
2*.separator的frame.size.height不能太細,推薦在0.5-1之間,如果覺得太厚,可以嘗試使用淡色,讓separator看起來細一些。
3.嘗試在drawRect方法中繪製細線。
4.由於cell可以重用,可以嘗試用storyboard來畫出某一個cell,然後重用(僅為猜測,是否能夠提升使用者體驗並沒有經過測試)