2015-08-23 19 views
9

Ho tre etichette nella mia cella di visualizzazione tabella statica e l'etichetta centrale deve essere multilinea.La cella di dimensionamento automatico con più etichette non mostra l'etichetta multilinea

Sto installando queste due righe in viewDidLoad()

self.tableView.estimatedRowHeight = 130.0 
self.tableView.rowHeight = UITableViewAutomaticDimension 

Lo storyboard si presenta così

enter image description here

ecco i vincoli per ogni visualizzazione secondaria

etichetta Top, etichetta di mezzo , etichetta in basso, pulsante

enter image description here

Ho anche impostato il numero di righe per l'etichetta centrale su 0. Tuttavia, mostra solo una singola riga, anziché più righe. Immagino che debba avere qualcosa a che fare con le priorità di compressione del contenuto o di compressione del contenuto o perché sto utilizzando uno UITableViewController con celle statiche.

UPDATE

Se cambio verticale resistenza a compressione Priorità dell'etichetta centrale a 751 e verticale Content priorità che abbraccia a 250, l'etichetta mostra multilinee, ma la cella non viene ridimensionata, in modo che la parte superiore e la l'etichetta in basso si trova all'esterno della cella ora.

UPDATE 2

Ho appena creato un progetto di esempio e si è scoperto che funziona con le cellule dinamici come previsto, ma non con le cellule statiche. È possibile scaricare il progetto di esempio qui: https://dl.dropboxusercontent.com/u/67692950/ResizingCell.zip

+0

Stai cercando un modo per rendere l'etichetta alta come deve essere per visualizzare tutte le linee? – luk2302

+0

@ luk2302 si, in modo automatico – gpichler

+0

si consiglia di dare un'occhiata a [questa domanda e le sue risposte] (http://stackoverflow.com/questions/12789013/ios-multi-line-uilabel-in-auto- layout) – luk2302

risposta

5

Ho clonato il tuo progetto di esempio. Penso che il problema è che non è necessario impostare l'altezza di UITableViewCell.

Questa è l'unica soluzione semplice.

enter image description here

· Per impostare Altezza riga "Default" nella tabella delle cellule di vista. (Custom incontrollato)

In questo caso, funziona.

Scarica il progetto di esempio che ho realizzato qui: https://www.dropbox.com/s/w8q6ov9qjfxu1l3/ResizingCell.zip?dl=0

Ma l'altro modo è che si calcola l'altezza di UITableViewCell da un'altezza di UILabel.

Se si personalizza la cella in modo più complicato, è meglio isolare la cella come cella personalizzata.

+0

Non funziona quando si imposta l'etichetta in basso come etichetta su più righe. – gabbler

0

Devi o chiamare layoutIfNeeded sulla cella dopo aver impostato il testo dell'etichetta multilinea o impostare le etichette preferredMaxLayoutWidth

+0

è un 'UITableViewController' con celle statiche, quindi non posso chiamarlo direttamente sulla cella, anche' preferredMaxLayoutWidth' dovrebbe essere fatto automaticamente in iOS 8 – gpichler

+0

@ user1463853 Puoi chiamarlo direttamente, basta eseguire l'istruzione 'tableView: willDisplayCell:' – Sulthan

2

In primo luogo, storyboard aperto, impostare l'altezza della riga Tableview a essere 100, deselezionare l'altezza della riga personalizzata per la cella tableview, quale valore è attualmente 100.

In secondo luogo, come ha detto @DBoyer, chiamare layoutIfNeeded. Se vedi "Impossibile soddisfare simultaneamente i vincoli, tenterà di ripristinare interrompendo il vincolo X", diminuisci la priorità di X a 999. Penso che gli avvertimenti potrebbero avere qualcosa a che fare con questo quando ottieni la cella, la cornice della cella è CGRectZero.

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = super.tableView(tableView, cellForRowAtIndexPath: indexPath) 
    cell.layoutIfNeeded() 
    return cell 
} 
0

Utilizzare il vincolo aspectRatio per le etichette. Il suo scopo è quello di cambiare larghezza e altezza in base alle necessità. Questo aiuterà

Problemi correlati