In questa app iOS 8 sto creando, ho una vista tabella e ho bisogno di ridimensionarli autonomamente. L'ho implementato usando Auto Layout e funziona. Quasi. Ecco come appare ora.UILabels multipli all'interno di un auto-dimensionamento UITableViewCell
Ci sono 3 etichette all'interno di una cellula. Etichetta principale che contiene il testo di lorem ipsum. Sottotitolo che ha la stringa di numeri (Quelli sono due etichette separate. Potrebbe essere fonte di confusione perché hanno lo stesso colore.) Quindi la terza etichetta con il piccolo testo nero.
La prima etichetta si ridimensiona correttamente senza alcun problema e la seconda etichetta si sposta su e giù di conseguenza. Ma il problema è con la terza piccola etichetta. Come puoi vedere, non si ridimensiona per adattarsi a tutto il testo.
Ora succede una cosa strana. Lo trasformo in orizzontale e qui è.
Poiché non v'è spazio l'etichetta sta visualizzando l'intero testo sua suppone. Belle. Poi lo restituisco al ritratto.
Ora la piccola etichetta stessa ha ridimensionato per adattarsi a tutti i suoi testi, ma trabocca i confini cellule. Ho provato a rendere la cella più grande ma non ha funzionato. Dal momento che questo è un auto-dimensionamento delle celle, non penso che sia il modo corretto anche.
Non ricevo alcun errore o avviso sui miei vincoli di layout automatico.
ho impostare queste due righe di codice nel metodo viewDidLoad()
.
tableView.estimatedRowHeight = 100
tableView.rowHeight = UITableViewAutomaticDimension
Qualcuno può dirmi per favore cosa potrei fare di sbagliato qui?
Dal momento che è difficile rispondere semplicemente guardando le immagini e non ho altro codice da inserire accanto allo snippet sopra riportato, ho caricato un progetto Xcode eseguibile che dimostra il problema here. (Esistono 2 celle personalizzate. Fondamentalmente è la stessa cella, solo l'altezza è aumentata nella seconda.)
Mi sono divertito con i vincoli di layout automatico ma non riesco a farlo funzionare. Qualsiasi aiuto sarebbe apprezzato.
Grazie.
UPDATE:
Con l'aiuto di questo tutorial ho trovato alcune indicazioni utili. In base ad esso, ogni sottoview dovrebbe avere vincoli che ne vincolano tutti i lati e ci dovrebbero essere dei vincoli che vanno dall'alto verso il basso che aiuta il layout automatico a calcolare l'altezza della cella. Nel mio post originale avevo spazi verticali tra ogni etichetta, quindi penso che sia il motivo per cui il layout automatico non è in grado di calcolare l'altezza corretta.
Quindi ho apportato alcune modifiche.
- Ho ridotto lo spazio verticale tra le etichette a 0 e impostato i vincoli di spazio verticale tra le etichette superiore e centrale e le etichette media e inferiore.
- Ho aggiunto i vincoli iniziali, superiori e finali all'etichetta superiore.
- In arrivo e in coda all'etichetta centrale.
- In arrivo, in basso, in coda all'etichetta inferiore.
Ora ecco un'altra parte strana. Quando lo eseguo per la prima volta, il problema del ritaglio dell'etichetta in fondo è ancora lì.
Ma se ruoto il dispositivo al paesaggio e ridare la parola a ritratto, tutte le tutte le cellule vengono ridimensionate correttamente per adattarsi entrambe le etichette!
Ancora non riesco a capire perché questo non accada in un primo momento, però. Il progetto Xcode aggiornato è here.
La tabella sta trovando troppo difficile stimare l'altezza esatta del testo nelle etichette prima della la vista appare, ma sta andando piuttosto bene lo stesso. Ho scoperto che se sposti tableView.estimatedRowHeight = 100 per viewDidAppear allora questo risolve il problema che stai vedendo – sketchyTech
... o meglio, sembra che la tabella stia usando l'altezza stimata come scusa per non eseguire un calcolo esatto al primo caricamento la tavola. Ma se stimaRowHeight viene spostato come descritto, risolve il problema che stai vedendo. La sua rimozione completa crea problemi di ridisegno durante la rotazione. – sketchyTech
@GoodbyeStackOverflow Ho fatto come suggerito ma sto affrontando alcuni problemi. [Ecco come appare quando lo esegui] (http://i.imgur.com/1CNGVgR.png) e [quando scorri verso il basso] (http://i.imgur.com/lH7hasO.png).Ho anche applicato lo stesso al mio secondo esempio e [questo è il risultato] (http://i.imgur.com/AWg9Yib.png). Sembra buono nelle prime 3 celle ma si noti che è stato incasinato nell'ultima cella. – Isuru