push遷移アニメーションが下のように斜めになってしまったので対策を調べてみました。
stackoverflowによると、遷移先のviewDidLoadでtableViewのcontentInsetAdjustmentBehaviorを.neverにすれば良いとのことでした。
popViewControllerの時のアニメーションは遷移元のcontentInsetAdjustmentBehaviorによるので、遷移先・遷移元の両方でセットすると良いかと思います。
if #available(iOS 11.0, *) { tableView.contentInsetAdjustmentBehavior = .never }
1つ1つのtableViewに設定するのが大変な時は、appearanceで設定すれば一括変更されます。
if #available(iOS 11.0, *) { UITableView.appearance().contentInsetAdjustmentBehavior = .never }
それとこちらの現象はUITableViewStyleがgroupedでもplainでも発生するようです。
Xcode9で新規作成したアプリではこの現象は発生しませんでした。
比較したところ、adjustedContentInsetというreadonlyプロパティーの値が違っていました。
今回は調べきれなかったのですが、adjustedContentInsetの値を変更すればcontentInsetAdjustmentBehaviorを使わずに対応できるかもしれません。
print(tableView.adjustedContentInset) // → Xcode9で作成したアプリはtopに64が入ってた、Xcode8以前で作成したアプリのtopは0だった
2017/10/13追記
下の方法ですが、UITableViewがタブバーやツールバーと被ってしまうという問題があるようです。
なので下方法を使う場合はUITableViewのtableFooterViewに何か置くなどの対処が必要になりそうです。
if #available(iOS 11.0, *) { UITableView.appearance().contentInsetAdjustmentBehavior = .never }
それと新規アプリがpushViewControllerで斜めにならないのはUINavigationBarのisTranslucentをtrueにしていたからでした。
この値をfalseにするとpushViewControllerが斜めになってしまうようです。
UINavigationBar.appearance().isTranslucent = false
参考URL
2017/10/30追記
TableViewがタブバーと被る問題、UITableViewControllerに下コードを足すことでも解消できました。
override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() if #available(iOS 11.0, *) { tableView.contentInset.bottom = tabBarController?.tabBar.frame.height ?? 0 } }
参考URL
iOS11 + Xcode9.0でedgesForExtendedLayoutの値を空にしていると、UITableViewのドリルダウンでアニメーションが崩れる