首先系統(tǒng)的分隔線有以下幾種
tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
-UITableViewCellSeparatorStyleNone //隱藏系統(tǒng)分隔線
-UITableViewCellSeparatorStyleSingleLine //單分隔線
-UITableViewCellSeparatorStyleSingleLineEtched //被侵蝕的單分隔線
自定義分隔線(首先要隱藏系統(tǒng)的分隔線)
- 通過xib或者代碼在cell底部添加一條高度為1的UIView或者UILable分隔線腹躁。
- 通過drawRect:方法自繪一條分割線
// 自繪分割線
- (void)drawRect:(CGRect)rect{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
CGContextFillRect(context, rect);
CGContextSetStrokeColorWithColor(context, [UIColor colorWithRed:0xE2/255.0f green:0xE2/255.0f blue:0xE2/255.0f alpha:1].CGColor);
CGContextStrokeRect(context, CGRectMake(0, rect.size.height - 1, rect.size.width, 1));
}
3.重寫cell的setFrame:方法
- (void)setFrame:(CGRect)frame{
frame.size.height -= 1;//設(shè)置分隔線
//設(shè)置cell的左右間距
frame.origin.x = 5;//左間距為5
frame.size.width = [UIScreen mainScreen].bounds.size.width - 2 * frame.origin.x;
// 給cellframe賦值
[super setFrame:frame];
}
4.利用系統(tǒng)屬性設(shè)置(separatorInset, layoutMargins)設(shè)置
- 對tableView的separatorInset, layoutMargins屬性的設(shè)置
-(void)viewDidLoad {
[super viewDidLoad];
//1.調(diào)整(iOS7以上)表格分隔線邊距
if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
self.tableView.separatorInset = UIEdgeInsetsZero;
}
//2.調(diào)整(iOS8以上)view邊距(或者在cell中設(shè)置preservesSuperviewLayoutMargins,二者等效)
if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
self.tableView.layoutMargins = UIEdgeInsetsZero;
}
}
- 對cell的LayoutMargins屬性的設(shè)置
//對cell的設(shè)置可以寫在cellForRowAtIndexPath里,也可以寫在willDisplayCell方法里
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ID = @"cell";
FSDiscoverSpecialCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
if (cell == nil) {
cell = [[FSDiscoverSpecialCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
}
//2.調(diào)整(iOS8以上)tableView邊距(與上面第2步等效,二選一即可)
if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
cell.preservesSuperviewLayoutMargins = NO;
}
//3.調(diào)整(iOS8以上)view邊距
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
return cell;
}
三種方法優(yōu)缺點比較:
方法1一般使用系統(tǒng)的cell湖雹,或者對cell沒有特殊要求的情況下使用系統(tǒng)的分隔線正压;
方法2是比較好用的,但是有些情況下系統(tǒng)自帶的cell就足夠用了,僅僅為了分隔線卻還必須再自定義cell,添加一個view,設(shè)置背景顏色和frame,又顯得麻煩;
方法3比較取巧,但是也需要自定義cell,在某些情況下不允許改變tableView的背景色,使用場景有限;
方法4不需要自定義cell,對系統(tǒng)(iOS7,iOS8以上)做個簡單判斷即可.