消除UITableView下面的额外分隔符

当我设置一个包含4行的表格视图时,在填充的行下面仍然有额外的分隔符行(或额外的空白单元格)。

如何去除这些细胞?

UITableView中额外分隔符行的图像

199095 次浏览

这是另一种方法,没有分组表样式,你可能猜不到。将一个标题和页脚添加到表(也许一个或另一个就足够了,还没有检查)会导致分隔符从填充/空白行中消失。

我偶然发现了这个,因为我想在表格的顶部和底部留出一点空间,以减少点击按钮的风险,而不是用多肉的手指点击表格单元格。这是一种将空白视图作为页眉和页脚粘贴的方法。使用任何你喜欢的高度,你仍然可以消除额外的分隔线。

- (void) addHeaderAndFooter
{
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
v.backgroundColor = [UIColor clearColor];
[self.myTableView setTableHeaderView:v];
[self.myTableView setTableFooterView:v];
[v release];
}

作为对@Casebash的回应,我回到了我的应用程序中的代码(iTunes商店中的“AcmeList”列表管理器…),并短路了addhead erANDter方法来验证。没有它,我有额外的行分隔符;有了代码,我就有了你在这个窗口快照中看到的东西:无表行分隔符图片。所以我不知道为什么它对你不起作用。此外,对我来说,在表格视图中拥有任何自定义页脚必然会停止为其下方的空行绘制行分隔符是有意义的。那将是可怕的。作为参考,我查看了那些行比屏幕上可以查看的多的表格,然后查看了一个有两行的表格。在这两种情况下,没有外来分离器。

也许您的自定义视图实际上并未添加。要检查这一点,请将背景颜色设置为clearColor以外的颜色,例如[UIColor redColor]。如果您在表格底部没有看到一些红色条,则说明您的页脚未设置。

我使用表格视图来显示固定数量的固定高度行,所以我简单地调整了它的大小并使其不可滚动。

接口生成器(iOS9+)

只需将UIView拖动到表格中即可。在故事板中,它将位于自定义单元格下方的顶部。您可以将其命名为“页脚”。

为了清晰起见,这里以绿色显示,您可能需要清晰的颜色。

请注意,通过调整高度,您可以根据需要影响表的“底部反弹”的处理方式。(高度为零通常没问题)。

在此处输入图片描述


以编程方式执行:

Swift

override func viewDidLoad() {
super.viewDidLoad()
self.tableView.tableFooterView = UIView()
}

Objective-c

iOS6.1+

- (void)viewDidLoad
{
[super viewDidLoad];


// This will remove extra separators from tableview
self.tableView.tableFooterView = [UIView new];
}

或者如果你愿意,

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

iOS:

添加到表视图控制器…

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return CGFLOAT_MIN;
}

如果有必要…

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
return [UIView new];


// If you are not using ARC:
// return [[UIView new] autorelease];
}

我想扩展wkw答案:

只需添加高度为0的页脚即可。(在sdk 4.2、4.4.1上测试)

- (void) addFooter
{
UIView *v = [[UIView alloc] initWithFrame:CGRectZero];


[self.myTableView setTableFooterView:v];
}

或者更简单-在设置tableview的地方,添加以下行:

//change height value if extra space is needed at the bottom.
[_tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)]];

或者更简单-简单地删除任何分隔符:

[_tableView setTableFooterView:[UIView new]];

再次感谢wkw:)

只需将位置x0 y-1处具有所需分隔符颜色作为背景色、100%宽度、1px高度的视图添加到你的tableViewCell。确保tableViewCell不会剪辑子视图,而是tableView应该剪辑。

因此,您只能在现有单元之间获得绝对简单且有效的分隔符,而无需对每个代码或IB进行任何黑客攻击。

注意:在垂直顶部弹跳时,会显示第一个分隔符,但这应该不是问题,因为它是默认的iOS行为。

试试这个。它对我有用:

- (void) viewDidLoad
{
[super viewDidLoad];


// Without ARC
//self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];


// With ARC, tried on Xcode 5
self.tableView.tableFooterView = [UIView new];
}

我知道这个问题已经被接受了答案,但我在这里提出了不同的方法来隐藏UITableView的额外分隔符线。

您可以隐藏tableView的标准分隔符行,并在每个单元格的顶部添加自定义行。

更新时间:

添加自定义分隔符的最简单方法是添加1px高度的简单UIView

UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
separatorLineView.backgroundColor = [UIColor grayColor]; /// may be here is clearColor;
[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];
}

<强>或 我最喜欢的最简单的方法是

self.tableView.tableFooterView = [[UIView alloc] init];

尝试任何一个;

iOS7+使用故事板

只需将UIView拖动到您的UITableView中作为页脚。将页脚视图的高度设置为0。

删除Swift中UITableView中空行的额外分隔符行

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.yourTableview.tableFooterView = UIView()
}

推进J. Costa的解决方案:您可以通过以下代码对表进行全局更改:

[[UITableView appearance] setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];

在第一个可能的方法中(通常在AppDelegate中,在:application:didFinishLaunchingWithOptions:方法中)。

试试这个

self.tables.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 10.0f)];

如果您使用的是Swift,请将以下代码添加到管理表视图的控制器的视频加载中:

override func viewDidLoad() {
super.viewDidLoad()


//...


// Remove extra separators
tableView.tableFooterView = UIView()
}

对于Swift:

    override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView()
}

如果你是子类化的UITableView你需要这样做…

-(void)didMoveToSuperview {
[super didMoveToSuperview];
self.tableFooterView = [UIView new];
}

我很幸运地实现了一个公认的答案(iOS9+,Swift 2.2)。

self.tableView.tableFooterView = UIView(frame: .zero)

但是,对我的tableView没有影响-我相信这可能与我使用UITableViewController的事实有关。

相反,我只需要覆盖viewForFooterInSection方法(我没有在其他地方设置tableFooterView):

override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView(frame: .zero)
}

这对于具有单个节的tableView工作正常(如果您有多个节,则需要指定最后一个节)。

如果您的view中有searchbar(例如限制结果数量),您还必须在shouldReloadTableForSearchStringshouldReloadTableForSearchScope:中添加以下内容

controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ];

uitableview额外的分隔符行隐藏额外的分隔符行隐藏在Swift 3.0中

 self.tbltableView.tableFooterView = UIView(frame: .zero)

Swift适用于:

tableView.tableFooterView = UIView()

我只是在ViewdicLoad函数中添加了这一行并修复了问题。

tableView.tableFooterView = [[UIView alloc] init];

如果您不希望在最后一个单元格后使用任何分隔符,那么您的页脚需要接近零但非零的高度。

在您的UITableViewDelegate中:

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return .leastNormalMagnitude
}

您可以在末尾添加一个空页脚,然后它会隐藏空单元格,但它看起来也很难看:

tableView.tableFooterView = UIView()

在此处输入图片描述

有一个更好的方法:在表格视图的末尾添加一条1点线作为页脚,空单元格也将不再显示。

let footerView = UIView()
footerView.frame = CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1)
footerView.backgroundColor = tableView.separatorColor
tableView.tableFooterView = footerView

在此处输入图片描述

如果你想在UITableview中删除不需要的空间,你可以使用以下两种方法

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

要以编程方式从UItableview底部消除额外的分隔符行,只需写下以下两行代码,它将从中删除额外的分隔符。

tableView.sectionFooterHeight = 0.f;
tableView.sectionHeaderHeight = 0.f;

这个把戏对我一直有效,你自己试试。

只需添加此代码(Swift)。.

tableView.tableFooterView = UIView()

如果你只有一个部分,那么最快和最简单的方法就是将表格视图样式从“普通”设置为“分组”。

表视图分组

如果您有更多的部分,您可能需要将标题高度设置为零(取决于您/您的客户/您的项目经理的口味)

如果你有更多的部分,并且不想弄乱标题(即使在最简单的情况下只是一行),那么你需要设置一个UIView作为页脚,正如前面的答案所解释的那样。

Swift 4.0扩展

只是故事板的一点扩展:

输入图片描述

extension UITableView {
@IBInspectable
var hideSeparatorForEmptyCells: Bool {
set {
tableFooterView = newValue ? UIView() : nil
}
get {
return tableFooterView == nil
}
}
}

tableViewtableFooterView时,UIKit不会创建空单元格。所以我们可以做一个技巧,分配一个零高度的UIView对象作为tableView的页脚。

tableView.tableFooterView = UIView()

快速简便的Swift 4方式。

override func viewDidLoad() {
tableView.tableFooterView = UIView(frame: .zero)
}

如果您有静态单元格。您也可以从检查器窗口关闭分隔符。(如果您需要分隔符,这将是不可取的。在这种情况下,使用上面显示的方法) 检查窗口

Swift 3 /Swift4 /Swift5+,非常简单

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
//MARK:- For Hiding the extra lines in table view.
tableView?.tableFooterView = UIView()
}

override func viewDidLoad(_ animated: Bool) {
super.viewDidLoad(animated)
//MARK:- For Hiding the extra lines in table view.
tableView?.tableFooterView = UIView()
}

在Swift(我使用的是4.0)中,您可以通过创建一个自定义的UITableViewCell类和overridingsetSelected方法来实现这一点。然后将separator insets全部转换为。(我的带有表格视图的主类有清晰的背景)颜色。

override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)


// eliminate extra separators below UITableView
self.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}

我添加了这个小的表视图扩展,有助于整个

extension UITableView {
func removeExtraCells() {
tableFooterView = UIView(frame: .zero)
}
}

你可能会找到这个问题的很多答案。他们中的大多数都围绕着UITableViewtableFooterView属性进行操作,这是隐藏空行的正确方法。为了方便起见,我创建了一个简单的扩展,允许从Interface Builder打开/关闭空行。 您可以从这个要点文件中查看它。我希望它可以节省您的时间。

extension UITableView {


@IBInspectable
var isEmptyRowsHidden: Bool {
get {
return tableFooterView != nil
}
set {
if newValue {
tableFooterView = UIView(frame: .zero)
} else {
tableFooterView = nil
}
}
}
}

用法:

tableView.isEmptyRowsHidden = true

在此处输入图片描述

试试这个

对于目标c

- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.yourTableView.tableFooterView = [UIView new];
}

对于Swift

override func viewDidLoad() {
super.viewDidLoad()
self.yourTableView.tableFooterView = UIView()
}

您可以通过添加次要的页脚高度来删除空行的分隔符

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 0.01
}