問題
いままではこのように固定の高さのCellとrow indexから計算して指定した位置へスクロールしていました。
let index: Int = 26
let rowHeight: CGFloat = 60
let offset = CGPoint(x: 0, y: rowHeight * CGFloat(index))
tableView.setContentOffset(offset, animated: true)
しかし、iOS 11からスクロール先がおかしな位置に移動するようになりました。
解決方法
原因はiOS 11でUITableView
のプロパティestimatedRowHeight
のデフォルト値がUITableViewAutomaticDimension
となった影響でした。
そこで、セルの固定高さでスクロールを調整したい場合の解決策はestimatedRowHeight
を明記する。(0
を指定すると自動調整を無効という意味になります。)
tableView.estimatedRowHeight = 60
もしくは、UITableViewDelegate
のメソッドで高さを明記します。
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 60
}
以上、estimatedRowHeight
の指定忘れが原因で起こるiOS 11の問題でした。