この状況ではiOSがインセットを自動的に調整するため、tableViewを満たすのに十分な行がない場合、iOS8では既存のすべてのソリューションが機能しません。(ただし、十分な行がある場合は、既存の回答が適切です)
この問題で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
}
これは完璧な解決策ではありませんが、iOS8で実際に機能する唯一の回避策です。より適切な解決策があるかどうか知りたいのですが。