4

I'm trying to get the size of my UIView after the orientation changes. In my view controller I implement didRotateFromInterfaceOrientation: and call setNeedsLayout: on my view. In my view's layoutSubviews method, it tries to perform some logic based on its new frame size post rotation, but the frame size has not been updated to reflect the new orientation (e.g. it is still 768x1024 instead of 1024x768 after moving to landscape).

How do I get the updated frame size?

Rishil Patel
  • 1,977
  • 3
  • 14
  • 30
phosphoer
  • 433
  • 6
  • 16

2 Answers2

4

Just going to answer with what Luis Oscar said so that the question shows up as answered. The solution is to access the "bounds" property rather than "frame".

phosphoer
  • 433
  • 6
  • 16
2

Please try this method.This method will call automatically at the time of rotation.Hope this may help you. Thanks.

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

    if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
        NSLog(@"%f,%f",self.view.frame.size.width,self.view.frame.size.height);
    } else if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {
        NSLog(@"%f,%f",self.view.frame.size.width,self.view.frame.size.height);
    }
}
Wagner Sales
  • 1,448
  • 2
  • 10
  • 14
Melbourne
  • 531
  • 3
  • 24
  • The problem with this for me is that the view in question is several levels down from the view controller (as in a subview of a subview of the viewcontroller's view). I'm not sure how I could get this information from the view controller to the view in a reasonable manner. – phosphoer Jun 22 '12 at 20:56