我們在開發(fā)中颂郎,UITableView是很常用的控件谒获。有的時候扳埂,系統(tǒng)自帶的分割線可以滿足產(chǎn)品的要求(實在是萬幸)业簿,但是大部分時候,系統(tǒng)自帶的分割線并不能滿足產(chǎn)品的需求阳懂,那就需要我們自定義梅尤。那么tableview的分割線我們一般是如何繪制的呢?
溫馨提示:以下設(shè)置分割線的方法只針對于tableview的plain樣式岩调,group樣式不適用巷燥。
一、自己添加一個view來實現(xiàn)
我們自定義tableview的分割線的時候号枕,一般是采用如下的方式:
- 先在tableview中缰揪,關(guān)閉系統(tǒng)自帶的分割線。
tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
- 在cell中添加一個view葱淳。按需求設(shè)置好顏色钝腺,設(shè)置view的高度為一個像素。然后把這個view添加到cell的contentview上蛙紫。
- (UIView *)line {
if (!_line) {
_line = [[UIView alloc] initWithFrame:CGRectMake(0,54, [UIScreen mainScreen].bounds.size.width, 1.0/[UIScreen mainScreen].scale)];
_line.backgroundColor = [UIColor blueColor];
}
return _line;
}
二拍屑、改造系統(tǒng)的分割線
隨著開發(fā)時間越來越長途戒,后來發(fā)現(xiàn)修改系統(tǒng)分割線的一些屬性也可以達到需求想要的效果坑傅,不一定要采用添加一個view的方式來實現(xiàn)自定義分割線。
系統(tǒng)自帶的分割線不是和屏幕等寬的喷斋,而是距離左邊緣15個像素唁毒。
造成以上效果的原因是系統(tǒng)自帶的分割線的edgeInsets默認是UIEdgeInsetsMake(0, 15, 0, 0)
蒜茴。
UIEdgeInsets的定義如下,分別是距離頂部浆西、左邊緣粉私、底部、右邊緣的距離近零。
UIKIT_STATIC_INLINE UIEdgeInsets UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right) {
UIEdgeInsets insets = {top, left, bottom, right};
return insets;
}
UIEdgeInsetsZero
和UIEdgeInsetsMake(0, 0, 0, 0)
是相等的诺核。
找到了系統(tǒng)分割線和屏幕不等寬的原因,那么當(dāng)我們需要一條和屏幕等寬的分割線時久信,就可以通過修改degeInsets來達到效果窖杀。步驟如下:
- 1.設(shè)置tableview的相關(guān)屬性。
tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; //設(shè)置分割線的分割
tableView.separatorColor = [UIColor blueColor]; //設(shè)置分割線的顏色
[tableView setSeparatorInset:UIEdgeInsetsMake(0, 0, 0, 0)]; //設(shè)置分割線的邊Insets
separatorStyle 可以不設(shè)置裙士,默認是打開的入客。
- 2.在cell的初始化方法中調(diào)用該方法:
[self setSeparatorInset:UIEdgeInsetsMake(0, 0, 0, 0)];
@property (nonatomic) UIEdgeInsets separatorInset NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR __TVOS_PROHIBITED; // allows customization of the separator frame
NS_AVAILABLE_IOS說明iOS7之后的系統(tǒng)都生效,所以setSeparatorInset:
可以放心調(diào)用腿椎。
如果需要一條兩邊都留邊距的分割線桌硫,修改UIEdgeInsetsMake
的左右邊距即可。例如:左右邊距同時留10個像素啃炸。代碼如是[self setSeparatorInset:UIEdgeInsetsMake(0, 10, 0, 10)];
溫馨提示:如果tableview和cell里設(shè)置的edgeInsets不一致時铆隘,cell里設(shè)置的edgeInsets生效。
綜上所述:個人覺得以上兩種設(shè)置分割線的方法南用,采用修改系統(tǒng)屬性來達到要求的方式更好一些咖驮。代碼量更少一些,維護方便训枢,還有就是不會有坐標設(shè)置的問題產(chǎn)生托修,如果使用自定義view的方式,如果坐標設(shè)置的不嚴謹恒界,會有坐標問題產(chǎn)生睦刃。除非是修改系統(tǒng)屬性實在是達不到產(chǎn)品要求,才建議去自己寫view實現(xiàn)分割線十酣。個人見解涩拙,僅供參看。
時代在進步耸采,人類的社會在發(fā)展兴泥。加油,明天會更好虾宇。