Di seguito ha lavorato per il mio 3.1 Swift code utilizzando Xcode 8.3.2 mira iOS 10.1 solo per iPhone.
Ho avuto lo stesso problema dell'OP. La mia app includeva una funzione di messaggistica. Volevo che l'ultimo post fosse visibile quando la visualizzazione dei messaggi è stata inserita nello stack. Le mie altezze di celle tableview sono variabili a causa del contenuto dei messaggi. Nessuna delle soluzioni ha funzionato in modo soddisfacente (l'ultima riga tableview non era visibile o solo parzialmente visibile). Ma, qui è quello che ha funzionato per me:
- In Interface Builder (IB) impostare l'altezza riga cella per un valore maggiore di quanto mi aspettassi mia altezza media fila per essere nel mio caso 50 (assicuratevi di controllare il Casella di controllo 'personalizzato').
Nel ViewController cui tableView è implementato all'interno funzione 'viewDidLoad' impostare proprietà del Tableview 'rowHeight' come segue:
myTableView.rowHeight = UITableViewAutomaticDimension
anche la funzione 'viewDidLoad' impostato del Tableview 'estimatedRowHeight' a un valore superiore a quello previsto per l'altezza della riga media. Nel mio caso 140.
Infine e soprattutto ho scritto questo pezzo di codice:
extension UITableView {
func scrollToBottom() {
let rows = self.numberOfRows(inSection: 0)
let indexPath = IndexPath(row: rows - 1, section: 0)
self.scrollToRow(at: indexPath, at: .top, animated: true)
}
}
Avviso del at: .top
— questo è ciò che ha risolto il mio problema. Passare il valore .bottom
per il parametro UITableViewScrollPosition
non ha funzionato. Anche il passaggio .middle
ha funzionato — ma non .bottom
.
Così, ogni volta che il mio set di dati devono essere aggiornati o un nuovo messaggio arriva chiamo
func getTableViewData(){
// Get your data here any way you usually do..
// call to reload
myTableView.reloadData()
// call the scroll function
myTableView.scrollToBottom()
}
ho testato i risultati di questo 'metodo' semplicemente cambiando il parametro at: .bottom
-at: .top
. Ogni volta che l'ho modificato su at: .top
, le ultime righe della tabella erano completamente visibili e la tabella scendeva fino in fondo.
'' [self.tableView setContentOffset: ...] 'funziona? –
No purtroppo ... –
Prova, tableView.scrollToRowAtIndexPath (NSIndexPath (forRow: arrayData.count, inSection: 0), atScrollPosition: UITableViewScrollPosition.Bottom, animato: true) –