2012-10-21 13 views
11

Ho un UITableView con un numero variabile di righe (celle) - l'altezza di queste righe è costante. Quello che vorrei è che l'altezza di UITableView dipenda dal numero di righe.UITableVista altezza basata sul numero di celle

Inoltre, vorrei che UITableView avvolgesse esattamente le celle, quindi nessuna imbottitura nella parte inferiore. Quindi se una cella ha altezza 60, tableview dovrebbe essere 60 per una cella, 120 per due celle, ecc ...

Grazie in anticipo!

risposta

28

È possibile accedere all'origine dati per trovare il numero di celle che verranno visualizzate. Moltiplicate questo numero per l'altezza di una riga e ottenete l'altezza dell'intera vista tabella. Per cambiare l'altezza di una vista tabella, puoi cambiare la sua proprietà frame.

È possibile accedere all'altezza (costante) di una riga della vista tabella accedendo alla relativa proprietà rowHeight. Se si riempie la vostra vista tabella con gli oggetti di un array chiamati myArray, è possibile utilizzare il seguente codice:

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

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

si potrebbe anche scoprire quante righe la visualizzazione della tabella conterrà chiedendo la vista tabella stessa, invece dell'oggetto dati. Qualcosa del genere dovrebbe funzionare:

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]; 
+0

Grazie per il tempo dedicato a risolvi questo problema. Ho iniettato il codice (adattato per il mio caso) nel mio metodo viewDidLoad, ma non ridimensiona UITableView. –

+0

Ho aggiunto un altro esempio per te, spero che aiuti. –

+4

beh, trovare il numero di celle non è il problema e nemmeno calcolare l'altezza. È il fatto che l'altezza del frame TableView non cambia (è forse perché il mio codice vive in ViewDidLoad? –

2

Ecco come ho risolto.

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

Implementare questo metodo delegato UITableView. Ogni volta che una fila di cellule crearla assegnare altezza per ogni cella

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

e implementare questo codice nel metodo viewDidLoad

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

Nota: - yourArray è un NSArray che contengono dati che quanti fila che si desidera per cassa.

O

Se yourArray valore recuperarli in modo dinamico quindi chiamare questo metodo dopo il recupero valore.

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

Spero che funzioni. Grazie

2

ho fatto una funzione per impostare l'altezza UITableView come da @ di timvermeulen codice

-(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; 
} 
0

Se vi piace potete utilizzare il metodo delegato tableView:numberOfRowsInSection: per impostare l'altezza UITableView dinamicamente, in questo modo:

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

Ricorda inoltre di definire il rowHeight in cui si avvia la visualizzazione della tabella:

self.myTableView.rowHeight = 60.0; 

...ma se il tuo obiettivo è solo quello di nascondere le celle vuote nella tabella, si dovrebbe aggiungere una vista vuota alla sua tableFooterView invece e ignorare tutto il codice di cui sopra (in modo da provare questo primo):

self.myTableView.tableFooterView = [UIView new]; 
Problemi correlati