Todas as soluções existentes não funcionam para mim no iOS 8 quando não há linhas suficientes para preencher o tableView, já que o iOS ajustará o inset automaticamente nesta situação. (No entanto, as respostas existentes são boas quando há linhas suficientes)
Depois de perder 6 horas com esse problema, finalmente consegui essa solução.
Resumindo, você precisa inserir células vazias em tableView se não houver células suficientes, então o tamanho do conteúdo de tableView é grande o suficiente para que o iOS não ajuste o inset para você.
Aqui está como eu fiz no Swift:
1.) declarar uma variável minimumCellNum
como uma propriedade de classe
var minimumCellNum: Int?
2.) calcular minimumCellNum
e definir tableView.contentOffset
emviewWillAppear
let screenHeight = Int(UIScreen.mainScreen().bounds.height)
self.minimumCellNum = (screenHeight - 103 - heightOfOtherCustomView) / heightOfYourCell
self.tableView.contentOffset = CGPointMake(0, 44)
3.) em tableView(tableView: UITableView, numberOfRowsInSection section: Int))
let numOfYourRows = YOUR LOGIC
if numOfYourRows > minimumCellNum {
return numOfYourRows
} else {
return minimumCellNum!
}
4.) Registre uma célula vazia, cujo selection
atributo seja None
, no storyboard e emtableView(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.) em tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
if tableView == self.tableView {
if numOfYourRows < (indexPath.row + 1) {
return
}
YOUR LOGIC OF SELECTING A CELL
}
Esta não é uma solução perfeita, mas é a única solução alternativa que realmente funciona para mim no iOS 8. Gostaria de saber se existe uma solução mais limpa.