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

我有我的UITableView几个问题。

  1. 当我在我的页面上添加一个UITableview ,默认情况下它会产生一些固定数量的行,即使我把段的行数设置为1 。 所有的行都出现在第一行之外, 并且都是空行。 所以,我想隐藏UItableview中的所有空行。

  2. 基于非空行,我想改变我的UItableView的高度。

你确定你正在使用UITableViewStyleGrouped风格?

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

新的答案

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

tableView.tableFooterView = UIView()

老解答如下。 KEPT的重要性。

如果您必须使用UITableViewStylePlain ,并且不使用footerView作为其他任何内容,则可以使用以下半脏解决scheme(如果已启用 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; } 

这会创build一个不可见的footerView,它会在最后一个填充数据的单元格之后立即出现。

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

和iOS 7

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

我通过使用与表背景相同的背景颜色创build一个简单的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; } 

也许你必须在你的表格视图中禁用滚动。

如果你的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; } 
 - (void) viewDidLoad { [super viewDidLoad]; self.tableView.tableFooterView = [[[UIView alloc] init] autorelease]; } 

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

在这里输入图像说明

 [self.SomeTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; 

如果UITableView是空的,使用这个来摆脱这些行。

在返回行数的方法中,dynamic指定自己的count 。 例如,如果你要用一个名为arrayForRows: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

编辑:啊,现在我得到你想要实现的。 你试图避免显示与这些分隔线分开的空行是正确的? 看到这个职位:

如何在UITableView中显示零行的表

伯恩答案中有一点隐藏 如果你想隐藏在一个普通的tableview中有多个部分的底部空行,使用这个答案:

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