在iPhone上打开热点会导致我的应用程序的屏幕向下移动

当我打开我的iPhone的人员HOT SPOT,然后我的应用程序的屏幕向下移动,我正在加载子视图。 但在其他屏幕上,它不会发生。 它只发生在我加载子视图的屏幕上。 那么有谁能告诉我可能是什么问题? 任何帮助将不胜感激。

每当热点或其他通知出现时,statusBarFrame将成为40px高。

CGRect rect; rect = [[UIScreen mainScreen] bounds]; // Get screen dimensions NSLog(@"Bounds: %1.0f, %1.0f, %1.0f, %1.0f", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height); rect = [[UIScreen mainScreen] applicationFrame]; // Get application frame dimensions (basically screen - status bar) NSLog(@"App Frame: %1.0f, %1.0f, %1.0f, %1.0f", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height); rect = [[UIApplication sharedApplication] statusBarFrame]; // Get status bar frame dimensions NSLog(@"Statusbar frame: %1.0f, %1.0f, %1.0f, %1.0f", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height); 

您可以处理UIApplicationWillChangeStatusBarFrameNotificationUIApplicationDidChangeStatusBarOrientationNotification通知,它会告诉您状态栏的新大小。 避免硬编码任何东西(例如40pt),而是从通知中获得新的状态栏框。

如果你只是需要高度,你可以很容易地把它拉出来。 如果您需要对状态栏框架进行更复杂的操作,则必须将其从屏幕坐标转换为您自己的视图坐标系(例如,如果您有全屏布局视图控制器,并且需要在其下面放置东西) :

 - (void)statusBarFrameWillChangeNotification:(NSNotification *)notification { NSValue *rectValue = notification.userInfo[UIApplicationStatusBarFrameUserInfoKey]; CGRect statusBarFrame = [rectValue CGRectValue]; // if you just need the height, you can stop here // otherwise convert the frame to our view's coordinate system UIWindow *targetWindow = self.view.window; // fromWindow:nil here converts from screen coordinates to the window CGRect statusBarFrameWindowCoords = [targetWindow convertRect:statusBarFrame fromWindow:nil]; CGRect frameRelativeToOurView = [self.view convertRect:statusBarFrameWindowCoords fromView:targetWindow]; // ... } 

在iOS 7中,转换坐标将非常重要,默认情况下,所有视图控制器都具有全屏布局。

状态栏展开后变为20个像素,状态栏的位置不变,只有大小。 没有布尔我想,但是你可以检查是否

 statusbarframe.size.height>20