Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get safeAreaInsets in viewWillTransitionToSize (iPhone X)

I’m trying to update the viewWillTransition(to size: with coordinator:) method for iPhoneX. But I can’t get the destinations of the safeAreaInsets values. Please help!

override func viewWillTransition(to size: CGSize,
        with coordinator: UIViewControllerTransitionCoordinator) {

    super.viewWillTransition(to: size, with: coordinator)

    if #available(iOS 11.0, *) {
        if let window = UIApplication.shared.keyWindow { 
            let insets = window.safeAreaInsets
            contentFrame = CGRect(x:insets.left, y:insets.top,
                width:size.width - insets.left - insets.right,
                height:size.height - insets.top - insets.bottom)
        }
    } else {
        contentFrame = CGRect(x:0,y:0,width:size.width, height:size.height)
    }
    self.updateViews()
}
like image 550
66tom Avatar asked Oct 03 '17 06:10

66tom


1 Answers

I got the valid solution at Stackoverflow Japan.

It's just getting the insets in the UIViewControllerTransitionCoordinator.animate(alongsideTransition:completion:) closure like below:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)

    coordinator.animate(alongsideTransition: { (context) in
        ...

        let insets = ...safeAreaInsets

        ...
    }, completion: nil)
}
like image 60
66tom Avatar answered Oct 18 '22 01:10

66tom