UITableView height based on number of cells

This is how i solved.

CGFloat height = self.mMyTicketTable.rowHeight;

float h = height * [self.mArrEName count];
if(h > 410.0)
{
    self.mMyTicketTable.frame = CGRectMake(0, 50, self.mMyTicketTable.frame.size.width, 410);
}
else
{
    self.mMyTicketTable.frame = CGRectMake(0, 50, self.mMyTicketTable.frame.size.width, h);
}
NSLog(@"h:%f", h);

Implement this UITableView delegate method . Whenever a cell row create it assign height to each cell

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
     return 60.0f;
}

and implement this code in viewDidLoad method

[yourTableView setFrame:CGRectMake(yourTableView.frame.origin.x, yourTableView.frame.origin.y, yourTableView.frame.size.width,(60.0f*([yourArray count])))];

Note :- yourArray is an NSArray which contain data that how many row you want to crate.

OR

If yourArray fetching value dynamically then call this method after fetching value.

-(void)setHeightOfTableView
{

    /**** set frame size of tableview according to number of cells ****/
    float height=60.0f*[yourArray count];

[yourTableView setFrame:CGRectMake(yourTableView.frame.origin.x, yourTableView.frame.origin.y, yourTableView.frame.size.width,(60.0f*([yourArray count])))];
}

I hope it works. Thanks


You could access your data source to find the number of cells that will be displayed. Multiply this number by the height of one row and you get the height of the entire table view. To change the height of a table view, you can change its frame property.

You can access the (constant) height of one row of your table view by accessing its rowHeight property. If you fill your table view with the objects of an array called myArray, you could use the following code:

CGFloat height = self.tableView.rowHeight;
height *= myArray.count;

CGRect tableFrame = self.tableView.frame;
tableFrame.size.height = height;
self.tableView.frame = tableFrame;

You could also find out how many rows the table view will contain by asking the table view itself, instead of the data object. Something like this should work:

NSInteger numberOfCells = 0;

//finding the number of cells in your table view by looping through its sections
for (NSInteger section = 0; section < [self numberOfSectionsInTableView:self.tableView]; section++)
    numberOfCells += [self tableView:self.tableView numberOfRowsInSection:section];

CGFloat height = numberOfCells * self.tableView.rowHeight;

CGRect tableFrame = self.tableView.frame;
tableFrame.size.height = height;
self.tableView.frame = tableFrame;

//then the tableView must be redrawn
[self.tableView setNeedsDisplay];