针对特定情况优化iOS应用

时间:2013-08-29 11:26:08

标签: ios iphone objective-c

当用户打开互联网共享时,顶部的黑色条变成蓝色并变宽,这会导致用户界面下降一点并导致一些问题,因为它现在看起来很奇怪,因为项目有被推倒并可能在底部切断。有办法处理这种情况吗?如果有的话,那里有任何教程可以帮助它吗?我一直在寻找,但还没有想出任何东西!

1 个答案:

答案 0 :(得分:2)

您可以处理UIApplicationWillChangeStatusBarFrameNotificationUIApplicationDidChangeStatusBarOrientationNotification通知,这些通知会告诉您状态栏的新大小。如果需要,您可以使用它来调整UI。避免对任何内容进行硬编码(例如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中,转换坐标尤为重要,因为默认情况下,所有视图控制器都具有全屏布局。