2013-02-10 22 views
11

Nell'app Orologio iPhone di Apple, quando un utente aggiunge un nuovo allarme, viene visualizzata una vista modale. Sto cercando di creare un'interfaccia utente simile a quella.Impossibile modificare l'altezza di UITableView

Attualmente ho un UITableViewController come controller di visualizzazione radice di un UINavigationController.

Ho anche un UIDatePicker aggiunto come una visualizzazione secondaria alla UINavigationController:

[self.navigationController.view addSubview:mydatePicker]; 

Tuttavia, ho circa 10+ righe nel mio UITableView (quello del UITableViewController) e appena ho aggiunto l'UIDatePicker I non è possibile scorrere per visualizzare tutte le celle.

Mi sono reso conto che la dimensione di UITableView è uguale a quella di prima che avessi aggiunto UIDatePicker e quindi avrei dovuto cambiarne le dimensioni per poter scorrere tutte le celle della tabella.

Ho provato diverse cose per cambiarne le dimensioni, tutto inutilmente. Nel codice qui sotto ho arbitrariamente scelto 50 per la nuova altezza.

Innanzitutto, provato variando l'altezza limiti:

CGRect bounds = [self.tableView bounds]; 
[self.tableView setBounds:CGRectMake(bounds.origin.x, 
            bounds.origin.y, 
            bounds.size.width, 
            50)]; 

quindi cercato di modificare l'altezza del telaio:

CGRect tvframe = [self.tableView frame]; 
[self.tableView setFrame:CGRectMake(tvframe.origin.x, 
            tvframe.origin.y, 
            tvframe.size.width, 
            50)]; 

Poi dopo googling alcuni più i provato a cambiare l'altezza contentSize:

CGSize thesize = self.tableView.contentSize; 
thesize.height = 50; 
self.tableView.contentSize = thesize; 

Nessuno di questi sembra avere alcun effetto sulla dimensione di UITableView. Non riesco ancora a scorrere per vedere tutte le celle.

Successivamente ho provato alcuni degli stessi metodi di cui sopra ma su UINavigationController invece di UITableView. Non ho avuto molta fortuna neanche con questo.

Come ultima risorsa, ho provato a modificare le dimensioni di UITableView nell'editor Storyboard. Nemmeno io riuscivo a capirlo.

Grazie per l'aiuto che puoi fornire.

+1

Si sta utilizzando un UITableViewController? Usando un semplice UITableView all'interno di un UIViewController personalizzato normalmente ha meno stranezze da superare. – Kekoa

+0

Sì, sto usando un UITableViewController (in realtà ho una classe personalizzata che eredita/implementa un UITableViewController). Aggiornerò post per riflettere questo – dtmland

risposta

18

Dal UITableViewControllerclass reference, esso:

crea un oggetto UITableView configurato con le dimensioni corrette e autoResize mascherare

E un preventivo dal Table View Programming Guide for iOS che affronta in modo specifico il problema:

Nota: Utilizzare una sottoclasse UIViewController anziché una sottoclasse di UITableViewController per gestire una vista tabella se la vista da gestire è composta da più visualizzazioni secondarie, solo una delle quali è una vista tabella . Il comportamento predefinito della classe UITableViewController è per fare in modo che la vista tabella riempia lo schermo tra la barra di navigazione e la barra delle linguette (se presente).

Se non si desidera che il controller di visualizzazione tabella abbia le dimensioni di TableView, è necessario utilizzare invece un UIViewController. Vedere il link che ho postato sopra alla Guida alla programmazione di Table View per iOS per altre cose da considerare quando si va su questa rotta.

+8

Apple ti odio a volte per fare un tale casino ...! – NightFury

0

È necessario rendere UITableView una vista secondaria della vista principale per poterla modificare in modo affidabile.

Il frame è il valore corretto da modificare dopo aver apportato questa modifica.

+0

Attualmente ho UITableview in un UITableViewController, non è sufficiente? Per "vista principale" intendi l'UINavigationController? – dtmland

+0

O forse vuoi dire creare un nuovo UIViewController come controller di visualizzazione radice di UINavigationController e aggiungere UITableView a questo? Come sarebbe diverso da lavorare con UITableview all'interno di UITableViewController? – dtmland

+0

Quello che volevo dire è aggiungere UITableView come sottomenu di ViewView del tuo ViewController. Ho perso il fatto che stavi usando UITableViewController, Inafziger è corretto. – Brane

0

Non so qual è il tuo vero problema. ma per modificare l'altezza del tuo UITableView e verrà visualizzato tutte le righe in UITableView scrivere il seguente codice.

self.tblView.frame = CGRectMake(0, 0, 320, 50); 

per favore provalo.

+0

Ho già provato questo come ho detto nel post. Non funziona. Il mio problema sta nella risposta data da Lnafziger. – dtmland

0

Si sta utilizzando il controller uitableview, al posto di tale uso su uiviewcontroller in cui aggiungere uitabelview. Ora puoi avere le dimensioni di uitableview.

3

Ho avuto lo stesso problema che hai menzionato. Non è stato possibile modificare l'altezza di tableView di UITableViewController. Ho provato a cambiare cornice e centro di self.view e self.tableview. Ma fallito Quindi l'ho risolto con un trucco, cambiando il contenuto di tableviewInset.

self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 44.0f, 0); // here you can replace 44.0f with your height 
Problemi correlati