Georgey
Georgey

Reputation: 105

How can I get the height of a view after screen rotation in swift?

There is a view, which I add constraints in storyboard so it will change its size after screen rotation, then how can I get its height and width after screen rotation? I tried this in a rotation event function like this:

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) 
{
    println("h:\(view.bounds.size.height)")
    println("w:\(view.frame.size.width)")
}

but it only give me the size before rotation happen. I would like to get something like:

"now is landscape, height is...width is..." "now is portrait, height is ...width is..." in a rotation event function

Upvotes: 9

Views: 8714

Answers (2)

falsch
falsch

Reputation: 117

Swift 3

crom87 answer updated for Swift 3:

override func viewWillTransition( to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator ) {
  DispatchQueue.main.async() {
    print( "h:\(self.view.bounds.size.height)" )
    print( "w:\(self.view.frame.size.width)" )
  }
}

Upvotes: 7

crom87
crom87

Reputation: 1371

The function you are using says "Will transition", that means the transition is not completed, so you can not fetch the new size.

You need to use :

dispatch_async(dispatch_get_main_queue()) { 
    println("h:\(view.bounds.size.height)")
    println("w:\(view.frame.size.width)")
             }

This code will be executed after the rotation was completed (in the main queue) and the new sizes are available.

Regards.

Upvotes: 20

Related Questions