Все существующие решения не работают для меня на iOS 8, когда недостаточно строк для заполнения tableView, поскольку iOS в этой ситуации автоматически настроит вставку. (Существующие ответы хороши, если строк достаточно)
Потратив около 6 часов на эту проблему, я наконец получил это решение.
Короче говоря, вам нужно вставить пустые ячейки в tableView, если ячеек недостаточно, поэтому размер содержимого tableView достаточно велик, и iOS не будет настраивать вставку для вас.
Вот как я это сделал в Swift:
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. Я хотел бы знать, есть ли более изящное решение.