以下はβ段階での情報を元にした内容となります。
そのため、GM版では変更となる可能性があります。
はじめに
iOS11の対応を行うにあたり、レイアウト周りでいくつかのバグを修正しました。
既出のものもあるかもしれませんが、個人的な備忘録も兼ねてまとめます。
検証環境
以下の環境を使用しています。
- macOS Sierra Version 10.12.6
- Xcode Version 9.0.0 β6
- iOS11.0β10
ContentInsetAdjustmentBehaviorについて
UIScrollViewに関してiOS11で新たに導入されたプロパティです。
contentInsetsを自動調整するかどうかを決めるものですが、デフォルトでautomaticになっています。そのため、contentInsetsを手動で設定している場合などにこのことを考慮していないと予期せぬ不具合が発生する可能性があります。
私の確認した範囲では、self.navigationController?.pushViewController(notifVC, animated: true)
を実行した際に遷移のアニメーションが斜め上方向になるという事象が発生しました。事象の実際のイメージにつきましては以下の資料をご参照ください。
対応方法
従来のレイアウトを踏襲するか、iOS11のContentInsetAdjustmentBehaviorに従来のロジックを合わせるかどちらかによりますが、従来のレイアウトをそのまま踏襲する場合は以下となります。
if #available(iOS 11.0, *) {
scrollView.contentInsetAdjustmentBehavior = .never
}
StoryBoardでのsafeArea設定について
StoryBoard上でautoLayout設定する際に、TopLayoutGuide, BottomLayoutGuideを使用することがあるかと思いますが、こちらがiOS11でdeprecatedになるようです。
[Apple Document - TopLayoutGuide]
(https://developer.apple.com/documentation/uikit/uiviewcontroller/1621367-toplayoutguide)
代わりに使用を推奨されているのがSafeAreaLayoutGuideです。
[Apple Document - SafeAreaLayoutGuide]
(https://developer.apple.com/documentation/uikit/uiview/2891102-safearealayoutguide)
topLayoutGuide, bottomLayoutGuideがdeprecatedになったことにともない、iOS11で該当のconstraintsを使用している場合に意図しない挙動になる可能性があります。
確認した範囲では、画面遷移時にtableViewが上方に一度ずれ、その後戻るという挙動が端末依存で発生しました。(iPhone5でのみ発生)
対応方法
StoryBoard上に設定を行うチェック項目がありますので、こちらにチェックをつけるのみです。
終わりに
この情報がどなたかのお役に立てられたら幸いです。