我有一个包含表格视图的视图控制器(见下面的截图)。这个表格视图始终恰好有3行,并且这些行在单击时会展开以显示更多信息。如何使表格视图的高度总是恰好显示这三行,不多不少?正如您在屏幕截图中看到的那样,没有内容的空行正在显示。
请注意,展开的行可能包含除UILabel之外的其他视图。
以下是它在IB中的外观:
请注意,展开的行可能包含除UILabel之外的其他视图。
以下是它在IB中的外观:
//Return number of rows in section
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
[self setTableHeight];
return 3;
}
//Method which lets you calculate the height of tableView depending on your 3 cells
- (void)setTableHeight
{
if(_isRowExpanded == NO)
{
tableHeightCalculated = rowHeight * 3; // rowHeight use default 44 or ur custom
}
else
{
//You need to put some logic here to Calculate or put approx height of Expanded_Row_Height
tableHeightCalculated = rowHeight * 2 + Expanded_Row_Height;
if(tableHeightCalculated > maxHeightAllowed) //maxHeightAllowed is your current table height in snapshot
{
tableHeightCalculated = maxHeightAllowed;
}
}
tableView.frame = CGRectMake(tableView.frame.origin.x, tableView.frame.origin.y,
tableView.frame.size.width, tableHeightCalculated);
}
添加这个footerview方法,它会起作用。这将删除空单元格。
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].applicationFrame.size.width, 0)];
v.backgroundColor = [UIColor clearColor];
[tableView setTableHeaderView:v];
[tableView setTableFooterView:v];
return v;
}
如果UITableView的垂直空间大于实际单元格所需的空间,它会插入虚假的空单元格。你不能真正控制这种行为,你能做的最多就是将表视图的高度设置为足够小的值。
frame
属性。 frame
还有size
和origin
两个属性。使用size
属性可以操纵宽度和高度,使用origin
可以操纵控件的x
和y
属性。CGRect frame = control.frame; //control是您的UIControl
frame.size.height = 10.0; //假设10是所需高度。
control.frame = frame;
希望这是您要寻找的内容。[tableview reloadRowsAtIndexPath:[NSArray arrayWithObject:indexPath]]
重新加载这个单元格。它会重新加载这一行,所以在你的数据源和代理中的每个方法中,你都需要平衡这个检查:返回更大的高度,渲染一个新的视图等等。希望这是你想要的。 - Farrukh Javeid试着初始化表格的底部视图:
TableView.tableFooterView = [[UIView alloc] init];
这两行代码对我来说非常有效,因为它们可以让表格的大小与内容大小完全匹配。虽然这只是一种“幻觉”,但却非常实用。
self.tableView.tableFooterView = [UIView new];
self.view.backgroundColor = [UIColor whiteColor];