动态调整UITableView高度

时间:2014-04-23 09:51:48

标签: ios iphone uitableview autolayout

如何动态调整UITableView高度?假设我有3行,每行的高度为65.当新行添加到UITableView时,我希望它动态调整它的高度以适应新行。删除行以缩小行时反之亦然。

3 个答案:

答案 0 :(得分:2)

编辑:误读

事物取决于(表格单元行的高度*表中的行数)作为tableview.frame.size.height。

好吧,我会建议像这样......

-(void)correctHeight
{

    //Note : if all cells are having common value
    CGFloat heightOfCell=[table rowHeight];

    CGFloat expectedHeightOfTable=0;
    for (int i=0; i< [table numberOfSections]; i++) {
        //header section
        CGFloat heightOfHeaderView=[table headerViewForSection:i].frame.size.height;
        expectedHeightOfTable = expectedHeightOfTable +heightOfHeaderView;

        //content section
         expectedHeightOfTable = expectedHeightOfTable + heightOfCell*[table numberOfRowsInSection:i];
    }
    [table setFrame:CGRectMake(table.frame.origin.x, table.frame.origin.y, table.frame.size.width,expectedHeightOfTable)];


}

这将考虑标题和每行内容以及所有值以propmatically方式填充。所以不需要添加一些硬编码值

答案 1 :(得分:1)

可以通过

设置tableview高度
[tableView setFrame:CGRectMake(0,0,width,height)];

但是例如,如果你使用tableView:heightForRowAtIndexPath将高度设置为150并且你将5行高度设置为60px,则tableView将变为可滚动,因为UITableView是UIScrollView的子类。

答案 2 :(得分:0)

正如评论中所说,奇怪的结构,但如果你坚持,那没关系。我建议只使用一个简单的UITableView

假设您有IBOutletUITableViewUIScrollView ...

viewWillAppear中添加代码之前,请添加:

float cellHeight = 65.0f;
int numberOfCells = 3;

- (void)viewWillAppear:animated中,在[super viewWillAppear:animated]之后添加以下内容:

// remember fill the table with data using UITableViewDataSource's functions first
// refresh UITableView data
[tableView reloadData];
// resize UITableView
[tableView setFrame:CGRectMake(0, 0, tableView.frame.size.width, cellHeight * numberOfCells)];
// make UIScrollView the same size as UITableView
[scrollView setContentSize:tableView.frame.size];
[scrollView setNeedsDisplay];
// remember to lock tableView's scrolling, either in code / Interface Builder
[tableView setScrollEnabled:NO];

UITableViewDelegate的委托方法中:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return numberOfCells;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
   return cellHeight;
}

最后,如果您希望双重验证是否有任何表格单元格不在视线范围内,您可以使用:

- (NSArray *)visibleCells