隐藏删除分隔线,如果UITableViewCells是空的
我有一个UITableView
,我只有3行,我可以看到这3行。 问题是空的单元格:我可以在那里看到线条。 我不想看到这些线。
任何想法如何删除这些线?
下面是我正在寻找的图像。
您可以使用以下代码片段中的任何一个来隐藏UITableView
的标准分隔线。 添加自定义分隔符最简单的方法是添加一个简单的1px高度的UIView
:
UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)]; separatorLineView.backgroundColor = [UIColor clearColor]; // set color as you want. [cell.contentView addSubview:separatorLineView];
要么
self.tblView=[[UITableView alloc] initWithFrame:CGRectMake(0,0,320,370) style:UITableViewStylePlain]; self.tblView.delegate=self; self.tblView.dataSource=self; [self.view addSubview:self.tblView]; UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)]; v.backgroundColor = [UIColor clearColor]; [self.tblView setTableHeaderView:v]; [self.tblView setTableFooterView:v]; [v release];
要么
- (float)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { // This will create a "invisible" footer return 0.01f; } - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { // To "clear" the footer view return [[UIView new] autorelease]; }
要么
而且也检查nickfalk的答案 ,这是非常短暂和有益的。 而且你也应该尝试这一行,
self.tableView.tableFooterView = [[UIView alloc] init];
不知道,但它适用于我检查的所有版本的iOS,iOS 5和更高版本,直到iOS 7。
甚至比Andrey Z的回复简单:只需在UITableView类中创build一个伪造的tableFooterView:
self.tableFooterView = [UIView new]; // to hide empty cells
和Swift:
tableFooterView = UIView()
透明UIView
作为一个tableView
页脚1px高度将做的伎俩。
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 1)]; v.backgroundColor = [UIColor clearColor]; [self.tableView setTableFooterView:v];
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
更新了swift和iOS 9的答案。这适用于.Plain
品种的.Plain
。
tableView.tableFooterView = UIView()
使用此代码删除分隔线为空单元格。
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { // This will create a "invisible" footer return 0.01f; } - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { return [UIView new]; // If you are not using ARC: // return [[UIView new] autorelease]; }
请尝试下面的代码:
self.tblView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; if ([self.tblView respondsToSelector:@selector(setSeparatorInset:)]) { [self.tblView setSeparatorInset:UIEdgeInsetsZero]; } // write in view did load
只是返回一个空的UIView()
在viewForFooterInSection
为我工作:
override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { return UIView() }
您可以使用
tableForBrands.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
它为我工作…
没有任何build议的答案适合我的类似问题。 在tableView委托中实现这个方法终于奏效了:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { tableView.separatorStyle = UITableViewCellSeparatorStyleNone; }
如果你正在使用故事板,你可以拖放一个UIView到你的单元格下面的UITableView,并将其高度设置为0.(仅在iOS 8项目中testing过)
我想这就是你要找的。
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ return 1.0f; }
您可以将表视图分组,而不是普通的 – 这会稍微改变外观,但至less会删除额外的行。
我有这个确切的问题,并最终变成分组意见。 看起来好多了。
一些以前的build议包含一个大的概念错误:
如果你这样做:
[cell addSubview:….
即使一个单元格被“重用”,你也会为分隔符添加一个新的子视图!
避免在两个方面:
a)使用一个TAG,并且:1)要求该标签的子视图让divider = cell.viewWithTag(TAG)… 2)如果存在,不要添加另一个子视图3)如果不存在,则添加AND标签。
b)创build自定义视图,并在自定义单元格的“init”“awakeFromNib”中添加自定义分隔线。
代码a):
if let divider = cell.viewWithTag(DIVIDER_TAG) as? UIView{ // nothing.. eventually change color bases in IndexPath... }else{ let frame = CGRectMake(0, cell.frame.height-1, cell.frame.width, 1) divider.tag = DIVIDER_TAG divider.backgroundColor = UIColor.redColor() cell.addSubview(divider) }
Swift解决scheme:tableView.tableFooterView = UIView(frame:CGRectZero)
在Xcode 7.2上工作
在cellForRowAtIndexPath中
let separatorLineView:UIView = UIView(frame: CGRectMake(0,0,self.tableview.bounds.width,0.5)) separatorLineView.backgroundColor = tableView.separatorColor cell!.contentView.addSubview(separatorLineView)
在UITableViewDataSource numberOfRowsInSection:
方法中添加以下行。
tableView.separatorColor = [UIColor clearColor];