2015-07-28 9 views
17

Sto provando a impostare l'altezza di una vista che si trova sulla parte superiore della cella del prototipo in un controller di visualizzazione tabella. Uso IB impostare è l'altezza (formato ispezione) e impostarlo a 61 in questo modo (la vista verde è il 'intestazione' vista):Impostazione dell'altezza dell'intestazione di tableView in Swift

header view

Ma qualora si esegue l'applicazione, il relativo estremità altezza fino a 568.0. Ho un IBOutlet chiamato testUIView per la visualizzazione nel mio controller di visualizzazione tabella, e faccio: println("testUIView Height->\(testUIView.frame.height)") e in effetti finisce con il 568.0 in fase di esecuzione.

Ecco uno screenshot che mostra la sua altezza in fase di esecuzione:

enter image description here

Quindi la mia domanda è: Come posso impostare l'altezza della vista ed è quindi 61 in fase di esecuzione in modo che appaia davvero come il mio primo screenshot (formato-saggio)?

Ho provato a impostare la sua proprietà di altezza all'interno di override func viewWillLayoutSubviews() ma non mi ha consentito di assegnare un valore all'altezza testUIView.frame.height = CGFloat(61.0).

Qualsiasi aiuto è apprezzato! Grazie in anticipo!

Cheers!

+0

C'è un motivo per cui non stai usando un'intestazione per la tua vista tabella? –

+0

In realtà no, mi dispiace per averlo chiesto, ma come posso usarne uno? – idelara

risposta

42

Se si desidera utilizzare un'intestazione per UITableView, invece, è possibile progettare un'altra cella prototipo in Interface Builder, creare una classe personalizzata basata su UITableViewCell e assegnarla alla cella prototipo nel builder dell'interfaccia nell'ispettore classe.

Poi nel controller si sta andando ad utilizzare

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 

In quella funzione si sta effettivamente andando a creare una cellula riutilizzabile dalla visualizzazione tavolo, ma lanciato come la cella personalizzato che hai fatto per l'intestazione. Si avrà accesso a tutte le sue proprietà, come un UITableViewCell regolare, allora si sta solo andando a ritornare vista della cellula

return cell.contentView 

Un altro metodo che si vuole utilizzare è

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 
    return 61.0 
} 

Quello è abbastanza auto esplicativo.

Swift 3.0.1

public override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 
    return 61.0 
} 
+2

Grazie! Ha funzionato! Un'altra cosa che volevo chiedere era ... Conosci qualche tecnica per farla rimanere sempre sotto la barra di navigazione in qualsiasi momento non scorrere con il resto delle celle? O non è possibile? – idelara

+1

Questo è coperto per questo: http: // StackOverflow.it/questions/17582818/uitableview-with-fixed-section-headers - felice che abbia funzionato! –

+0

Grazie per il link! Per quanto riguarda il codice ... sai quale sezione sarebbe rilevante per ciò che sto cercando di ottenere? Ho fatto un tentativo ma idk quale metodo sarebbe utile. Scusa se chiedo troppo, ma in realtà non conosco l'Objective-C e mi perdo in tutte quelle parentesi quadre ... – idelara

8

Swift 3/Xcode 8:

Aggiungere questo viewDidLoad():

let HEADER_HEIGHT = 100 
tableView.tableHeaderView?.frame.size = CGSize(width: tableView.frame.width, height: CGFloat(HEADER_HEIGHT)) 

Enjoy!

Problemi correlati