UITableView height basado en el número de celdas

Tengo una UITableView con un número variable de filas (celdas): la altura de estas filas es constante. Lo que me gustaría es hacer que la altura de UITableView dependa del número de filas.

Además, me gustaría que UITableView envolviera exactamente las celdas, por lo que no hay relleno en la parte inferior. Entonces, si una celda tiene altura 60, tableview debe ser 60 para una celda, 120 para dos celdas, etc.

¡Gracias por adelantado!

Puede acceder a su fuente de datos para encontrar la cantidad de celdas que se mostrarán. Multiplica este número por el alto de una fila y obtienes la altura de toda la vista de tabla. Para cambiar el alto de una vista de tabla, puede cambiar su propiedad de marco.

Puede acceder a la altura (constante) de una fila de su vista de tabla accediendo a su propiedad rowHeight . Si llena su vista de tabla con los objects de una matriz llamada myArray , puede usar el siguiente código:

 CGFloat height = self.tableView.rowHeight; height *= myArray.count; CGRect tableFrame = self.tableView.frame; tableFrame.size.height = height; self.tableView.frame = tableFrame; 

También podría averiguar cuántas filas contendrá la vista de la tabla preguntando la vista de la tabla en sí, en lugar del object de datos. Algo así debería funcionar:

 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 networkingrawn [self.tableView setNeedsDisplay]; 

Así es como me resuelvo.

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

Implemente este método delegado de UITableView. Cada vez que una fila de celda lo crea, asigna altura a cada celda

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

e implementa este código en el método viewDidLoad

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

Nota: yourArray es un NSArray que contiene datos que indican cuántas filas desea crear.

O

Si yourArray recupera el valor dinámicamente, llame a este método después de get el valor.

 -(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])))]; } 

Espero que funcione. Gracias

Hice una function para establecer la altura de la vista adecuada según el código de @ timvermeulen

 -(void)setTableViewheightOfTable :(UITableView *)tableView ByArrayName:(NSArray *)array { CGFloat height = tableView.rowHeight; height *= array.count; CGRect tableFrame = tableView.frame; tableFrame.size.height = height; tableView.frame = tableFrame; } 

Si lo desea, puede usar el método de delegado tableView:numberOfRowsInSection: para establecer la altura de UITableView dinámicamente, así:

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { CGFloat numberOfRows = self.myArray.count; CGRect tableViewFrame = tableView.frame; tableViewFrame.size.height = numberOfRows * tableView.rowHeight; tableView.frame = tableViewFrame; return numberOfRows; } 

Recuerde también definir la rowHeight donde inicia la vista de tabla:

 self.myTableView.rowHeight = 60.0; 

… pero si su objective es solo ocultar celdas vacías en la tabla, debe agregar una vista vacía a su tableFooterView e ignorar todo el código anterior (así que intente esto primero):

 self.myTableView.tableFooterView = [UIView new];