消除uitableview tablefooterview分隔符

时间:2014-11-20 16:29:49

标签: ios uitableview tablefooterview

我有一个带有tablefooterview的uitableview。我想在tableview中使用单元格分隔符,但是想要摆脱tableview和tablefooterview之间默认放置的全屏宽度分隔符。我试过了

if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
    [cell setLayoutMargins:UIEdgeInsetsZero];
}

cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0);

但不起作用

3 个答案:

答案 0 :(得分:0)

使用以下代码

tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

答案 1 :(得分:0)

看看这个示例实现。
你可以在这里看到,如果设置了footerView,那么带plain样式的UITableView实际上会松开最后一个分隔符。

(橙色视图是页脚视图,他上面没有分隔符)
当然在Grouped tableView中,这不会像您在问题中的评论中所讨论的那样起作用。

enter image description here

https://gist.github.com/bartekchlebek/2b05b5ddcc3efec3f514

#import "ViewController.h"

@interface ViewController () <UITableViewDataSource>

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds
                                                        style:UITableViewStylePlain];
  tableView.dataSource = self;
  tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

  UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 40)];
  footerView.backgroundColor = [UIColor orangeColor];
  tableView.tableFooterView = footerView;

  [self.view addSubview:tableView];
}

#pragma mark - UITableViewDataSource

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ID"];
  cell.textLabel.text = [NSString stringWithFormat:@"Row: %@", @(indexPath.row)];
  return cell;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  return 20;
}

@end

答案 2 :(得分:0)

编辑: 我发现避免最后一个部分和表格页脚之间的间隙的一个更简单的方法是实现heightForFooterInSection并返回一个非常小的值。这将导致没有任何可见。

出于某种原因,返回0并不会抑制分组样式表视图中的节页脚的呈现,并且它将尝试呈现1点页脚。关于这一点,还有关于StackOverflow的其他讨论。

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return CGFLOAT_MIN;
}

我能够以一种略带苛刻的方式实现这一目标,但似乎工作得很好。

我的hack只是将所需的实际页脚视图放在包装器视图中,框架位置为(0,-1)。

假设您有一个要使用的表格页脚视图,这是一个名为MyTableFooterView的类。

在这种情况下,你可以这样做:

//This is the view we will actually add as the table footer
//We make it one point shorter since the content will be shifted up 
//one point out of its frame
CGRect footerFrame = CGRectMake(0, 0, self.tableView.width, myFooterHeight-1);
UIView* tableFooterWrapper = [[UIView alloc] initWithFrame:footerFrame];

//This is the view that we are trying to use as a table footer. 
//We place it 1 point up inside the wrapper so it overlaps that pesky 1-point separator.
CGRect contentFrame = CGRectMake(0, -1, self.tableView.width, myFooterHeight);
UIView* footerContent = [[MyTableFooterView alloc] initWithFrame:contentFrame];


//Make sure the footer expands width for to other screen sizes
footerContent.autoresizingMask = UIViewAutoresizingFlexibleWidth;
[tableFooterWrapper addSubview:footerContent];
self.tableView.tableFooterView = tableFooterWrapper;

这对我来说可靠。可能有更惯用的方式,但我还没有遇到过。