定制可隐藏seperator的UITableViewCell

在iOS应用开发中,遇到需要隐藏UITableView相邻section分隔线的需求。由于默认的separator不是针对section设置的,因此不能直接修改。解决方案包括:1.在xib/storyboard中构造自定义cell;2.新建cell类控制绘制separator;3.让xib中的cell继承自定义cell类。最终选择了第三种方式,它允许在保证可定制性的同时,减少代码量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

在iOS的app开发中碰到这样的需求:

隐藏UITableView中相邻两个section的separator——即隐藏上方section最下面的separator,以及下方section最上面的seperator。


困难分析:

separator是UITableView的属性,而不是cell、section的属性(但相关属性定义在UITableViewCell.h中),因此无法直接修改seperatorStyle来达到目标。

解决的思路是,隐藏UITableView的separator

tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
然后根据cell位置的不同,选择性地在cell中人为绘制separator


实现:

具体实现时有多种办法可供选择:

1. 在xib/storyboard文件中构造自定义cell,在data source中以如下方式进行复用

cell = [tableView dequeueReusableCellWithIdentifier:@"custom_cell"];
优点:思路清晰,实现简单

缺点:每个viewController都需要构造cell,而且界面和逻辑耦合严重。


2. 新建cell类,通过参数控制cell绘制separator的位置

cell = [[DriftyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil seperatorStyle:DriftyTableViewCellHideNoSeperator];

优点:逻辑与界面完全解耦,可定制化程度高

缺点:如果要在cell中加入其它元素,如textfield,就必须通过代码添加


3. 让xib/storyboard中的cell继承自定义cell类

优点:结合了xib可视化和代码可定制化的优点

缺点:实现遇到了bug。该思路需要重写自定义cell的initWithCoder方法,在该方法中初始化separotor的位置、颜色、粗细等等。然后在data source中可以

cell = [tableView dequeueReusableCellWithIdentifier:@"Cell_B"];
但是实现出来发现separator只会在cell的两边出现(在公司贴不了图)。尝试后发现,修改xib文件中的cell背景,使其不是default即可正确显示,暂时不知道原理是什么。


第三种方式是目前采用的方式,在定制其他类型的控件时,也可以使用该方法,以减少代码量、提高控件的可定制度。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值