Всі існуючі рішення не працюють для мене на iOS 8, коли для заповнення tableView недостатньо рядків, оскільки iOS автоматично регулює вставку в цій ситуації. (Існуючі відповіді хороші, коли достатньо рядків)
Потративши близько 6 годин на це питання, я нарешті отримав це рішення.
Коротше кажучи, вам потрібно вставити порожні комірки в tableView, якщо недостатньо комірок, тому розмір вмісту tableView досить великий, щоб iOS не коригувала вставку для вас.
Ось як я це зробив у Свіфті:
1.) оголосити змінну minimumCellNumяк властивість класу
var minimumCellNum: Int?
2.) обчислити minimumCellNum і набір tableView.contentOffsetвviewWillAppear
let screenHeight = Int(UIScreen.mainScreen().bounds.height)
self.minimumCellNum = (screenHeight - 103 - heightOfOtherCustomView) / heightOfYourCell
self.tableView.contentOffset = CGPointMake(0, 44)
3.) в tableView(tableView: UITableView, numberOfRowsInSection section: Int))
let numOfYourRows = YOUR LOGIC
if numOfYourRows > minimumCellNum {
return numOfYourRows
} else {
return minimumCellNum!
}
4.) Зареєструйте порожню комірку, selectionатрибут якоїNone , на розкадруванні та вtableView(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.) в tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
if tableView == self.tableView {
if numOfYourRows < (indexPath.row + 1) {
return
}
YOUR LOGIC OF SELECTING A CELL
}
Це не ідеальне рішення, але це єдине обхідне рішення, яке справді працює для мене на iOS 8. Я хотів би знати, чи є більш акуратне рішення.