UITableView分割线Separator这件小事

前天为了一个分割线粗了的问题,真是伤透脑筋。


粗了的Separator

处理Separator的方式

1.使用系统的Separator时

重写Cell或者在cell返回的地方设置也可以,separatorInset设置成你想要的边距就行。自由伸缩哦,填满的分割先Zero就可以咯。

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        self.separatorInset = UIEdgeInsetsMake(top: 0, left: 10, bottom: 0, right: 10)
        self.layoutMargins = UIEdgeInsetsZero
        self.preservesSuperviewLayoutMargins = false
    }
    return self;
}
2.使用CustomSeparator时

这个就简单点处理了,就是自己添加一下分割线。先给UIVIew加个分类方法,边距设置insets。

- (void)addBottomLineWithColor:(UIColor *)lineColor insets:(UIEdgeInsets)insets {
    UIView *bottomLine = [[UIView alloc] init];
    bottomLine.backgroundColor = lineColor;
    [self addSubview:bottomLine];
    [bottomLine mas_makeConstraints:^(MASConstraintMaker *make) {
        make.height.equalTo(@(CGFloatFromPixel(1)));
        make.bottom.equalTo(self);
        make.edges.equalTo(self).insets(insets).priorityLow();
    }];
}

然后初始化的时候调用就好

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        [self.contentView addBottomLineWithColor:[UIColor black8Color] insets:UIEdgeInsetsMake(0, 12, 0, 0)];
    }
    return self;
}

问题来了

使用Plain类型的UITableView时倒是无任何问题。但是当我要用Group类型,又要用系统Separator时,问题就来了。
用过Group的朋友都知道,SectionHeaderView上下会自动出现SeparatorLine,十分便捷,无需你我动手。然而刚好有的地方是不用SectionHeaderView的,高度设置为0,结果变成了一个默认高度。所以只好设置为0.001f咯。

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    if (section==0) {
        return 0.001;
    }
    return 8;
}

因此出现了开题图中叠在一起的粗线。。。捣腾了两个小时,任凭我如何摆弄,都无法消除它。最后无耐,选择了自己添加分割线。
记录一下,希望后人少走弯路。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容