Tutte le soluzioni esistenti non funzionano per me su iOS 8 quando non ci sono abbastanza righe per riempire il tableView poiché iOS regolerà automaticamente l'inset in questa situazione. (Le risposte esistenti sono buone quando ci sono abbastanza righe però)
Dopo aver sprecato circa 6 ore su questo problema, ho finalmente ottenuto questa soluzione.
In breve, è necessario inserire celle vuote in tableView se non ci sono abbastanza celle, quindi la dimensione del contenuto di tableView è abbastanza grande che iOS non aggiusterà l'inserto per te.
Ecco come l'ho fatto in Swift:
1.) dichiarare una variabile minimumCellNum
come proprietà di una classe
var minimumCellNum: Int?
2.) calcolare minimumCellNum
e insieme tableView.contentOffset
aviewWillAppear
let screenHeight = Int(UIScreen.mainScreen().bounds.height)
self.minimumCellNum = (screenHeight - 103 - heightOfOtherCustomView) / heightOfYourCell
self.tableView.contentOffset = CGPointMake(0, 44)
3.) in tableView(tableView: UITableView, numberOfRowsInSection section: Int))
let numOfYourRows = YOUR LOGIC
if numOfYourRows > minimumCellNum {
return numOfYourRows
} else {
return minimumCellNum!
}
4.) Registra una cella vuota, il cui selection
attributo è None
, nello storyboard e intableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
if indexPath.row < numOfYourRows {
return YOUR CUSTOM CELL
} else {
let cell = tableView.dequeueReusableCellWithIdentifier("EmptyCell", forIndexPath: indexPath) as! UITableViewCell
return cell
}
5.) in tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
if tableView == self.tableView {
if numOfYourRows < (indexPath.row + 1) {
return
}
YOUR LOGIC OF SELECTING A CELL
}
Questa non è una soluzione perfetta, ma è l'unica soluzione alternativa che funziona davvero per me su iOS 8. Mi piacerebbe sapere se esiste una soluzione più ordinata.