iOS:如何动态设置UITableView的高度

时间:2012-10-10 14:27:11

标签: iphone ios uitableview

我有一个包含表格视图的视图控制器(见下面的截图)。此表视图始终只有3行,单击这些行时会展开以显示更多信息。我怎样才能使表格视图的高度始终显示这三行,而不是更多?正如您在屏幕截图中看到的那样,显示没有内容的空行。

请注意,展开的行可能包含UILabel以外的其他视图。

以下是它在IB中的表现:

enter image description here

6 个答案:

答案 0 :(得分:5)

我认为你需要这样的东西

//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);
}

答案 1 :(得分:0)

如果垂直空间比显示实际单元格所需的空间大,则UITableView会插入假空单元格。您无法真正控制此行为,您可以做的最多就是将表格视图的高度设置为足够小的值。

答案 2 :(得分:0)

使用您希望通过编程操作的任何控件的frame属性。 frame还有sizeorigin两个属性。使用size属性可以操纵宽度和高度,使用origin可以操纵控件的xy属性。 你想要的是通过:

CGRect frame = control.frame; //control is your UIControl

frame.size.height = 10.0; //suppose 10 is the desired height.

control.frame = frame;

希望这就是你要找的东西。

答案 3 :(得分:0)

尝试初始化表的页脚视图:

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

答案 4 :(得分:0)

添加此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;
}

答案 5 :(得分:0)

在我希望表格看起来与内容大小完全匹配的情况下,这两行适用于我。它是一种幻想"但就像一个魅力。

 self.tableView.tableFooterView = [UIView new];
 self.view.backgroundColor = [UIColor whiteColor];