5

Realmente creo un UIScrollView con un UITableView al suo interno con il generatore di interfacce. Ho impostato la dimensione contenuto del mio UIScrollView con:Problema relativo alle dimensioni del contenuto per UITableView in UIscrollView

scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height); 

e ho impostato vista proprietario del mio file al UIScrollView

ho creato un IBOutletUITableView e ho impostato nel generatore di interfaccia.

Quando la vista è caricata. visualizza la dimensione del contenuto corretta per il mio UIScrollView. Ma non visualizza la dimensione del contenuto corretta per il mio UITableView. Inoltre, quando cambio la dimensione del contenuto del mio UIScrollView, cambia la dimensione del contenuto del mio UITableView come se entrambe le dimensioni del contenuto fossero correlate.

Qualcuno sa come posso mantenere la dimensione del contenuto della vista tabella che ho impostato nel builder dell'interfaccia?

risposta

12

A UITableView è un UIScrollView. Ci sono pochissime volte in cui sarebbe utile incorporare unall'interno di uno UIScrollView.

Supponendo che tu lo voglia davvero, dovrai fare quanto segue da qualche parte. Probabilmente nel tuo UIViewController in metodi come viewDidAppear: o da qualche parte dopo aver popolato la vista tabella.

// Set the size of your table to be the size of it's contents 
// (since the outer scroll view will handle the scrolling). 
CGRect tableFrame = tableView.frame; 
tableFrame.size.height = tableView.contentSize.height; 
tableFrame.size.width = tableView.contentSize.width; // if you would allow horiz scrolling 
tableView.frame = tableFrame; 

// Set the content size of your scroll view to be the content size of your 
// table view + whatever else you have in the scroll view. 
// For the purposes of this example, I'm assuming the table view is in there alone. 
scrollView.contentSize = tableView.contentSize; 
+0

Non funziona ancora ... In realtà, quando NSLog tableView.frame viene visualizzato (null). Non capisco ... – kschaeffler

+0

In realtà, il proprietario del mio file è delegato di UIScrollView e UITableView che è una scrollView. È un problema? – kschaeffler

+0

Avrei dovuto essere più esplicito. 'tableView' e' scrollView' dovrebbero essere gli IBOutlet associati a tali elementi. – DBD

0

Se si verificano ancora problemi, provare questo senza la necessità di una scrollView.

Dopo aver suonato in giro con l'esempio di DBD per un po ', ho scoperto che il telaio e contentSize non sembrano essere in grado di impostare insieme come:

self.tableView.contentSize = CGSizeMake(320, scrollHeight); 
self.tableView.frame = CGRectMake(self.tableView.frame.origin.x,44,self.tableView.contentSize.width,self.tableView.contentSize.height); 

Il tentativo è stato quello di impostare un'altezza massima della frame ma conserva la possibilità di scorrere tutti i contenuti se ci fosse un numero elevato di celle. Questo hack sembra funzionare bene e può essere modificato con ulteriori condizioni se necessario:

int cellCount = [YOURARRAY count]; 
CGFloat scrollHeight = cellCount*44+44;//for a cell with height of 44 and adding 44 if you have a toolbar at the bottom 

self.tableView.contentSize = CGSizeMake(320, scrollHeight);//you can change the width and or let the .xib control the autoresizing 

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && cellCount < 14) 
{ 
    //here's were you can add more conditions if you're in landscape or portrait, but this handles 14 cells with a heightForHeaderInSection of 46 in landscape 
    self.tableView.frame = CGRectMake(self.tableView.frame.origin.x,44,self.tableView.contentSize.width,scrollHeight); 
} 
else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone && cellCount < 7) 
{ 
    //same as above but it's for the iPhone in portrait 
    self.tableView.frame = CGRectMake(self.tableView.frame.origin.x,44,self.tableView.contentSize.width,scrollHeight); 
} 

Questo funziona di sicuro. Potrebbe essere necessario regolare la maschera di autoresizzazione all'interno del tuo .xib o nel tuo codice, ma questa modifica è l'unica soluzione che ho trovato che si occupa di tutte le diverse variabili nel mio caso.

1

Esempio di gestire dinamicamente l'altezza TableView con ScrollView, lavora a Swift:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     // Custom Cell 
     let cell:TblPortCell = self.tableList.dequeueReusableCellWithIdentifier("cell") as! TblPortCell 

     //tableList is the OutLet for the table 
     tableList.sizeToFit() 
     // Set the size of the table to be the size of it's contents 
     // (since the outer scroll view will handle the scrolling). 
     let height = tableList.frame.size.height 
     let pos = tableList.frame.origin.y 
     let sizeOfContent = height + pos + 130 
     //scrollView is the Outlet for the Scroll view 
     scrollView.contentSize.height = sizeOfContent 
     scrollView.sizeToFit() 

     cell.selectionStyle = UITableViewCellSelectionStyle.None 
     return cell 
    } 

Riferimenti a:

0

chiamata di seguito metodo dei multipli volte. Ogni volta che chiami ci saranno più celle.

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

scrollView.contentSize = tableView.contentSize; 
Problemi correlati