Edited at

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 のまま新しく調整しなおすかになるかと思われます