Как я заставляю свое представление появиться ниже зеленой панели во время телефонного вызова? прямо сейчас мое приложение частично покрывается зеленой панелью во время телефонного вызова.
Если вы используете Interface Builder, убедитесь, что ваши маски автоматического изменения размера настроены так, что он изменяет размеры представлений, а не просто помещает их в одно и то же положение. Вы можете использовать опцию Toggle In-Call Status Bar в разделе «Оборудование» в симуляторе, чтобы проверить это.
Если вы не используете IB, вы можете настроить маски автоматического изменения размера в коде.
Если вы не используете представления, вам нужно будет изменить размер графики, когда вы получите соответствующие уведомления.
Вы можете узнать, когда это произойдет, используя следующие методы 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.
}