Search code examples
iosobjective-cios7statusbar

How to fix iOS 7 status bar height and width issue


I have made a custom toast library (very simple, just a box which appears under navigation bar). Which works fine in iOS 6 which is my target group. But since iOS 7 has released it didn't display correctly.

The way I tried to fix it was through this code:

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7,0")){
    self.offset = [UIApplication sharedApplication].statusBarFrame.size.height + self.viewController.navigationController.navigationBar.frame.size.height;
}

I made a macro which can be found on Stack overflow to detect if the iOS version is 7 and then add the status bar height and the navigation height. This works correctly in portrait mode in iOS 7, but when I switch to landscape offset becomes 512?.

Can anybody explain way this happens and how I can fix this?


Decided to split the code because a comment and see what is exactly causing the difference. What I did was:

CGFloat statusBarHeight =[UIApplication sharedApplication].statusBarFrame.size.height;

CGFloat navBar = self.viewController.navigationController.navigationBar.frame.size.height;
self.offset = statusBarHeight + navBar;
NSLog(@"Init - statusBarHeight: %f, navBar: %f", statusBarHeight, navBar);

As it turns out for some reason statusbar is in portrait 20 and in landscape it is 480


This is because height and width are turned around, answer came from comment


Solution

  • As I have previously done same "fixes", I've noticed that in landscape

    [UIApplication sharedApplication].statusBarFrame.size.width  
    

    and

     [UIApplication sharedApplication].statusBarFrame.size.height  
    

    values are switched.