消除UITableView下面的额外分隔符

Rou*_*oon 690 cocoa-touch uitableview ios

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

我该如何移除这些细胞?

UITableView中额外分隔线的图像

J. *_*sta 1472

界面构建器(iOS 9+)

只需将UIView拖到表中即可.在故事板中,它将位于自定义单元格下方的顶部.您可能更喜欢将其命名为"页脚".

为清晰起见,此处以绿色显示,您可能需要清晰的颜色.

请注意,通过调整高度,您可以根据需要影响表格的"底部反弹"处理方式.(高度零通常很好).

在此输入图像描述


要以编程方式执行此操作:

迅速

override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.tableFooterView = UIView()
}
Run Code Online (Sandbox Code Playgroud)

Objective-C的

iOS 6.1+

- (void)viewDidLoad 
{
    [super viewDidLoad];

    // This will remove extra separators from tableview
    self.tableView.tableFooterView = [UIView new];
}
Run Code Online (Sandbox Code Playgroud)

或者如果你愿意,

    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
Run Code Online (Sandbox Code Playgroud)

历史上在iOS中:

添加到表视图控制器...

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

如有必要......

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

    // If you are not using ARC:
    // return [[UIView new] autorelease];
}
Run Code Online (Sandbox Code Playgroud)

  • @Mathieu这将有效,因为如果表有一个自定义页脚,它将不会创建"fantom"行来填充tableview.因此,您将创建一个空视图以用作页脚并将高度设置为接近0(它不能为零或iOS不会呈现它).通过这个简单的技巧,您将更改默认行为. (4认同)
  • 使用`tableFooterView`在行的最后一个单元格上留下一个分隔符,因为该表仍然预期该单元格下面的内容.使用历史方法将消除最后一个分隔符并且整体看起来更好. (3认同)
  • @ j.Costa:在创建uitableview时,您的解决方案只能运行一次.点击最后一个单元后,你的解决方案不是更好.请改进你的答案. (2认同)

wkw*_*wkw 128

这是另一种方法,可以用分组表格样式,而你可能不会猜到.向表中添加页眉和页脚(可能是一个或其他,没有检查)会导致分隔符从填充/空白行中消失.

我偶然发现了这个因为我想在桌子的顶部和底部留一点空间来降低按钮的风险,而不是用手指粗糙的桌子.这是一种将空白视图作为页眉和页脚粘贴的方法.使用您喜欢的任何高度,您仍然可以消除额外的分隔线.

- (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];
}
Run Code Online (Sandbox Code Playgroud)

为了回应@Casebash,我回到我的应用程序中的代码(iTunes商店中的"AcmeLists"列表管理器......)并将addHeaderAndFooter方法短路以进行验证.没有它,我有额外的行分隔符; 使用代码,我在你的窗口中看到了snap:没有表格行分隔符图片.所以我不确定为什么它不适合你.此外,对我来说,在表视图上设置任何自定义页脚必然会停止为其下方的空行绘制行分隔符.那将是可怕的.作为参考,我查看了可以在屏幕上查看的行数更多的表格,然后查看了包含两行的表格.在这两种情况下,都没有外来的分离器.

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


din*_*uru 68

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

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


Gun*_*nds 34

我想延长wkw的回答:

只需添加高度为0的页脚就可以了.(在sdk 4.2,4.4.1上测试)

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

    [self.myTableView setTableFooterView:v];
}
Run Code Online (Sandbox Code Playgroud)

甚至更简单 - 在您设置tableview的地方,添加以下行:

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

甚至更简单 - 只需删除任何分隔符:

[_tableView setTableFooterView:[UIView new]];
Run Code Online (Sandbox Code Playgroud)

再次感谢wkw :)


Kyl*_*egg 22

适用于使用Storyboard的iOS 7+

只需将其UIView拖入UITableView页脚即可.将页脚视图的高度设置为0.


Amb*_*non 18

试试这个.它对我有用:

- (void) viewDidLoad
{
  [super viewDidLoad];

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

  // With ARC, tried on Xcode 5
  self.tableView.tableFooterView = [UIView new];
}
Run Code Online (Sandbox Code Playgroud)


Seb*_*ian 13

对于Swift:

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.tableFooterView = UIView()
    }
Run Code Online (Sandbox Code Playgroud)


Bab*_*emi 8

如果您使用的是Swift,请将以下代码添加到管理tableview的控制器的viewDidLoad:

override func viewDidLoad() {
    super.viewDidLoad()

    //...

    // Remove extra separators
    tableView.tableFooterView = UIView(frame: CGRectZero)
}
Run Code Online (Sandbox Code Playgroud)

对于Swift 4.0,不推荐使用CGRectZero,因此您必须使用它 CGRect.zero


Dar*_*rko 8

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

tableView.tableFooterView = UIView()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有一种更好的方法:在表格视图的末尾添加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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


o.s*_*hnn 7

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

[[UITableView appearance] setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];
Run Code Online (Sandbox Code Playgroud)

在第一个可能的方法内(通常在AppDelegate,in:application:didFinishLaunchingWithOptions:方法).

  • 小心这一点,有些情况下你的目标页脚可以被覆盖,你会花一两天质疑你的理智.此外,tableFooterView未标记UI_APPEARANCE_SELECTOR,因此实际行为可能随时更改. (2认同)

iPa*_*tel 6

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

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

更新:

添加自定义分隔符的最简单方法是添加UIView1px高度的简单:

UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
separatorLineView.backgroundColor = [UIColor grayColor]; /// may be here is clearColor;
[cell.contentView addSubview:separatorLineView];
Run Code Online (Sandbox Code Playgroud)

要么

    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];
Run Code Online (Sandbox Code Playgroud)

要么

- (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];
}
Run Code Online (Sandbox Code Playgroud)

要么 我喜欢的最好和最简单的方式是

self.tableView.tableFooterView = [[UIView alloc] init];
Run Code Online (Sandbox Code Playgroud)

尝试任何一个;


roy*_*roy 6

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

tableView.tableFooterView = UIView()
Run Code Online (Sandbox Code Playgroud)


Sta*_*ski 6

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

extension UITableView {

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

用法:

tableView.isEmptyRowsHidden = true
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Par*_*la 5

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

 self.tbltableView.tableFooterView = UIView(frame: .zero)
Run Code Online (Sandbox Code Playgroud)


Mar*_*tti 5

Swift适用于:

tableView.tableFooterView = UIView()
Run Code Online (Sandbox Code Playgroud)


Cœu*_*œur 5

如果在最后一个单元格之后不希望使用任何分隔符,则页脚的高度需要接近于零,但高度不能为零。

在您的UITableViewDelegate

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}
Run Code Online (Sandbox Code Playgroud)