Как расположить представление ниже зеленой панели во время телефонного вызова?

Как я заставляю свое представление появиться ниже зеленой панели во время телефонного вызова? прямо сейчас мое приложение частично покрывается зеленой панелью во время телефонного вызова.

11
задан Sheehan Alam 21 July 2010 в 21:26
поделиться

2 ответа

Если вы используете Interface Builder, убедитесь, что ваши маски автоматического изменения размера настроены так, что он изменяет размеры представлений, а не просто помещает их в одно и то же положение. Вы можете использовать опцию Toggle In-Call Status Bar в разделе «Оборудование» в симуляторе, чтобы проверить это.

Если вы не используете IB, вы можете настроить маски автоматического изменения размера в коде.

Если вы не используете представления, вам нужно будет изменить размер графики, когда вы получите соответствующие уведомления.

7
ответ дан 3 December 2019 в 01:44
поделиться

Вы можете узнать, когда это произойдет, используя следующие методы UIApplicationDelegate:

- (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame {
    NSLog(@"willChangeStatusBarFrame : newSize %f, %f", newStatusBarFrame.size.width, newStatusBarFrame.size.height);
}

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)newStatusBarFrame {
    NSLog(@"didChangeStatusBarFrame : newSize %f, %f", newStatusBarFrame.size.width, newStatusBarFrame.size.height);
}

Альтернативно, вы можете зарегистрироваться для уведомления в вашем подклассе UIViewController:

- (void)viewDidLoad {
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameChanged:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameWillChange:) name:UIApplicationWillChangeStatusBarFrameNotification object:nil];
}

- (void)statusBarFrameWillChange:(NSNotification*)notification {
    NSValue* rectValue = [[notification userInfo] valueForKey:UIApplicationStatusBarFrameUserInfoKey];
    CGRect newFrame;
    [rectValue getValue:&newFrame];
    NSLog(@"statusBarFrameWillChange: newSize %f, %f", newFrame.size.width, newFrame.size.height);
    // Move your view here ...
}

- (void)statusBarFrameChanged:(NSNotification*)notification {
    NSValue* rectValue = [[notification userInfo] valueForKey:UIApplicationStatusBarFrameUserInfoKey];
    CGRect oldFrame;
    [rectValue getValue:&oldFrame];
    NSLog(@"statusBarFrameChanged: oldSize %f, %f", oldFrame.size.width, oldFrame.size.height);
    // ... or here, whichever makes the most sense for your app.
}
24
ответ дан 3 December 2019 в 01:44
поделиться