iOS
ios11

iOS11 で UIScrollView の contentInsetがずれる問題

More than 1 year has passed since last update.

既存のアプリをiOS11のシミュレータとかで動かすと結構な頻度で遭遇するかもしれません。

これは iOS11から scrollView で NavigationBar や ToolBar にあわせて contentInset を調整しなくてよくなったためです。
iOS10アプリでそのへんを考慮した調整をしていると、ずれます。
(UIScrollViewを内包してるWKWebView, UIWebView, UITableViewも同様)

※ 公開済みの資料をもとに書いてますが、問題ありましたら教えてください

資料

詳細 (要Safari)
https://developer.apple.com/videos/play/wwdc2017/204/
https://developer.apple.com/videos/play/wwdc2017/204/?time=1090
この辺から語られている

どう変わったの

image.png

今まではNavigationBarとかを設置していたらcontentInset.topを設定してやっていたが

image.png

iOS11からはUIKitが勝手に調整してくれます、ということだそうです

adjustedContentInset.top に調整された分の値が入ってます

※ToolBarなども同様

実装の話

https://developer.apple.com/documentation/uikit/uiscrollviewcontentinsetadjustmentbehavior

UIScrollViewに、

var contentInsetAdjustmentBehavior: UIScrollViewContentInsetAdjustmentBehavior

というプロパティが増える。
ここに上記enumをセットしてやることで勝手に調整してくれたりしてくれなかったりする。
デフォルトが automatic で、勝手に調整することになっているため、
iOS10までのアプリでscrollViewのcontentInsetを自分で調整してるアプリは、そのままだとずれてしまう。

never を指定しつつ既存のcontentInset調整をそのまま活かすか、
automatic のまま新しく調整しなおすかになるかと思われます