標高ワカールというアプリを提供しているのですが、中心の十字を中央に合わせるのに少し困ったので記録を書きます。

実現したい事


最初の実装

こんな感じで、中央にAutoLayoutを設定します。

問題

ずれてしまう。

理由

Apple MAP側がSafeAreaに配慮して中央を調整している。

対策

iPhoneX系では下側にも領域があるから view.safeAreaInsets.bottom の調整も必要です。上と下にマージンを分配するために、2で割りましょう。


@IBOutlet var targetYtConstraint: NSLayoutConstraint!

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    
    targetYtConstraint.constant =
        (view.safeAreaInsets.top - view.safeAreaInsets.bottom) / 2.0
}

結果

これで上手に当てることが出来ました。