如何在UITableView中隐藏空行并根据非空行更改Uitableview的高度

时间:2010-11-18 09:17:25

标签: ios uitableview

我的UITableView有几个问题。

  1. 当我在页面上添加UITableview时,默认会显示一些固定数量的行, 即使我将部分中的行数设置为1。除第一行外,所有行都显示,都是空行。所以,我想要隐藏UItableview中的所有空行。

  2. 根据非空行,我想更改UItableView的高度。

11 个答案:

答案 0 :(得分:79)

新答案

在Swift 2.2,3.0及更高版本中,执行以下操作:

tableView.tableFooterView = UIView()

以下的老答案。 KEPT for POSTERITY。

如果您必须使用UITableViewStylePlain,并且不使用footerView进行其他操作,则可以使用以下半脏解决方案,如果您已启用ARC 。:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    UIView *view = [[UIView alloc] init];

    return view;
}

如果ARC 已禁用,请使用以下命令:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    UIView *view = [[[UIView alloc] init] autorelease];

    return view;
}

这会创建一个不可见的footerView,它会在最后一个数据填充的单元格后立即显示。

答案 1 :(得分:53)

您确定使用的是UITableViewStyleGrouped样式吗?

因为默认情况下它设置为UITableViewStylePlain,在显示填充的单元格后也会显示空单元格。

答案 2 :(得分:34)

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

和iOS 7

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

答案 3 :(得分:18)

我通过创建一个简单的UIView作为页脚视图来解决问题,其背景颜色与表格背景相同:

(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)] autorelease];
    view.backgroundColor = [UIColor whiteColor];
    return view;
}

此外,您可能必须在表格视图中禁用滚动。

答案 4 :(得分:11)

如果您的tableview有多个部分,您可以尝试使用它:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    if (section == tableView.numberOfSections - 1) {
        return [UIView new];
    }
    return nil;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    if (section == tableView.numberOfSections - 1) {
        return 1;
    }
    return 0;
}

答案 5 :(得分:11)

- (void) viewDidLoad
{
  [super viewDidLoad];
  self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];
}

答案 6 :(得分:6)

这也可以通过Interface Builder完成。只需将1像素高的UIView作为页脚添加到UITableView。它与大多数答案基本相同,但它在视图中保留了一些UI细节,而不是在视图控制器中。

enter image description here

答案 7 :(得分:6)

[self.SomeTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];

如果UITableView为空,请使用此选项删除行。

答案 8 :(得分:0)

在返回行数的方法中,动态指定count。例如,如果您打算使用名为NSArray

arrayForRows:来填充表格
return [arrayForRows count]; // inside the method which returns the number of rows.

以上是一个使用数组作为数据源填充表的简单示例。没有空行。根据填充表格的数组中的count项,表中只显示那么多行。

我认为你的意思是表中行的高度。您可以使用以下方法来处理行的高度:

(CGFloat)tableView:(UITableView  *)tableView heightForRowAtIndexPath:(NSIndexPath  *)indexPath

阅读http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UITableViewDelegate/tableView:heightForRowAtIndexPath

编辑:啊现在我得到了你想要实现的目标。您是否试图避免显示用这些分隔线分隔的空行?看这篇文章:

how to display a table with zero rows in UITableView

答案 9 :(得分:0)

有点隐藏在伯恩的回答中;如果要在具有多个部分的普通tableview中隐藏到底部空行,请使用以下答案:

https://stackoverflow.com/a/5658100/580173

答案 10 :(得分:0)

对于Swift:

override func viewWillAppear(animated: Bool) {
    self.tableView.tableFooterView = UIView(frame: CGRect.zeroRect)

// OR 

    self.tableView.tableFooterView = UIView()
}

对于C#:(请不要忘记添加using CoreGraphics;

public override void ViewWillAppear(bool animated)
{
    base.ViewWillAppear(animated);
    this.sampleTableview.TableFooterView = new UIView(frame: CGRect.Empty);
}