問題
いままではこのように固定の高さの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の問題でした。