如何修复iOS 7状态栏的高度和宽度问题

Haa*_*nti 5 objective-c statusbar ios ios7

我已经制作了一个自定义吐司库(非常简单,只是一个出现在导航栏下面的框).哪个在我的目标群体iOS 6中运行良好.但是自从iOS 7发布以来它没有正确显示.

我试图解决它的方式是通过这段代码:

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

我创建了一个宏,可以在Stack overflow上找到,以检测iOS版本是否为7,然后添加状态栏高度和导航高度.这在iOS 7中以纵向模式正常工作,但当我切换到横向偏移变为512?时.

任何人都可以解释这种情况发生的方式以及如何解决这个问题?


决定拆分代码,因为评论,看看究竟是什么导致了差异.我做的是:

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);
Run Code Online (Sandbox Code Playgroud)

事实证明,状态栏在纵向20和景观中是480


这是因为高度和宽度转过来,回答来自评论

Gun*_*nds 12

正如我以前做过同样的"修复",我注意到了景观

[UIApplication sharedApplication].statusBarFrame.size.width  
Run Code Online (Sandbox Code Playgroud)

 [UIApplication sharedApplication].statusBarFrame.size.height  
Run Code Online (Sandbox Code Playgroud)

值被切换.


Gol*_*umb 7

Travis Jeffery在http://travisjeffery.com/b/2013/05/using-the-status-bars-frame-in-ios/上提供了一个很好的解释

让我从他的网站上复制它:

"状态栏的框架和高度的技巧是确保你已经将它转换为你关心的视图的坐标空间,这可能是一个UIViewController的视图或子视图."

CGRect statusBarFrame = [yourView.window convertRect:UIApplication.sharedApplication.statusBarFrame toView:yourView];
CGFloat statusBarHeight = statusBarFrame.size.height;
Run Code Online (Sandbox Code Playgroud)