Alle vorhandenen Lösungen funktionieren unter iOS 8 nicht, wenn nicht genügend Zeilen vorhanden sind, um die Tabellenansicht zu füllen, da iOS den Einschub in dieser Situation automatisch anpasst. (Bestehende Antworten sind gut, wenn genügend Zeilen vorhanden sind.)
Nachdem ich ungefähr 6 Stunden mit diesem Problem verschwendet hatte, bekam ich endlich diese Lösung.
Kurz gesagt, Sie müssen leere Zellen in die Tabellenansicht einfügen, wenn nicht genügend Zellen vorhanden sind. Daher ist die Inhaltsgröße der Tabellenansicht groß genug, damit iOS den Einschub nicht für Sie anpasst.
So habe ich es in Swift gemacht:
1.) Deklarieren Sie eine Variable minimumCellNum
als Klasseneigenschaft
var minimumCellNum: Int?
2.) berechnen minimumCellNum
und SET tableView.contentOffset
inviewWillAppear
let screenHeight = Int(UIScreen.mainScreen().bounds.height)
// 101 = Height of Status Bar(20) + Height of Navigation Bar(44) + Height of Tab Bar(49)
// you may need to subtract the height of other custom views from the screenHeight. For example, the height of your section headers.
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.) Registrieren Sie eine leere Zelle mit dem selection
Attribut None
im Storyboard und 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
}
Dies ist keine perfekte Lösung, aber es ist die einzige Problemumgehung, die unter iOS 8 wirklich für mich funktioniert. Ich würde gerne wissen, ob es eine bessere Lösung gibt.