当我在 iPhone 中打开人员热点时,我的应用程序屏幕向下移动,我正在其中加载子视图。但在其他屏幕上不会发生。它只发生在我正在加载子视图的屏幕上。那么有人可以告诉我可能是什么问题吗?任何帮助将不胜感激。
问问题
3289 次
3 回答
2
您可以处理UIApplicationWillChangeStatusBarFrameNotification
和UIApplicationDidChangeStatusBarOrientationNotification
通知,它将告诉您状态栏的新大小。避免硬编码任何东西(例如 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 中尤为重要,因为默认情况下所有视图控制器都具有全屏布局。
于 2013-07-26T13:15:32.553 回答
2
每当热点或其他通知出现时,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);
于 2013-07-26T12:35:36.617 回答
0
状态栏扩大并变大 20 像素,状态栏的位置没有变化,只有大小。我认为没有布尔值,但是您可以检查是否
statusbarframe.size.height>20
于 2013-07-26T13:15:43.810 回答