Как заставить мой вид появляться под зеленой полосой во время телефонного звонка? прямо сейчас мое приложение частично закрывается зеленой полосой во время телефонного звонка.Как установить вид под зеленой полосой во время телефонного звонка?
ответ
Если вы» re, используя Interface Builder, убедитесь, что ваши маски авторезистировки установлены так, что они изменяют размеры представлений вместо того, чтобы просто сидеть там в одной и той же позиции. Вы можете использовать опцию Toggle In-Call Status Bar в разделе Hardware in the Simulator для ее проверки.
Если вы не используете 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.
}
Обратите внимание, что приведенные выше предложения также срабатывают при повороте устройства. Если вы просто хотите найти, когда строка состояния выросла в высоту из-за входящего/текущего телефонного звонка. Я нашел следующий код для работы:
AppDelegate.m
- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
float adjustment = 0;
if ([UIApplication sharedApplication].statusBarFrame.size.height == 40)
{
adjustment = -20;
}
else if ([UIApplication sharedApplication].statusBarFrame.size.height == 20 && oldStatusBarFrame.size.height == 40)
{
adjustment = 20;
}
else
{
return;
}
CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimationDuration;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:duration];
{YOUR VIEW Controller - remove .view if a view}.view.frame = CGRectMake({YOUR VIEW Controller}.view.frame.origin.x, {YOUR VIEW Controller}.view.frame.origin.y + adjustment, {YOUR VIEW Controller}.view.frame.size.width, {YOUR VIEW Controller}.view.frame.size.height);
[UIView commitAnimations];
}
Idem с Tab Bar App и iOS6/7, благодаря user1208489 «s answer.
Значения совершенно разные и странные для каждого iOS. , ОЦ
mainAppDelegate.m
- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
float vue = 0;
float barre = 0;
float hauteur = 0;
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 // pour Xcode5/SDK7
if ([UIApplication sharedApplication].statusBarFrame.size.height == 40)
{
vue = -20;
barre = +20;
}
else
if ([UIApplication sharedApplication].statusBarFrame.size.height == 20 && oldStatusBarFrame.size.height == 40)
{
vue = 0;
barre = -20;
}
else return;
#else // pour Xcode4/SDK6
if ([UIApplication sharedApplication].statusBarFrame.size.height == 40)
{
vue = +20;
hauteur = 1;
barre = -1-20;
}
else
if ([UIApplication sharedApplication].statusBarFrame.size.height == 20 && oldStatusBarFrame.size.height == 40)
{
vue = -20;
hauteur = -1;
barre = +1+20;
}
else return;
#endif
CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimationDuration;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:duration];
self.tabBarController.view.frame = CGRectMake(self.tabBarController.view.frame.origin.x, self.tabBarController.view.frame.origin.y + vue, self.tabBarController.view.frame.size.width, self.tabBarController.view.frame.size.height+hauteur);
self.tabBarController.tabBar.frame = CGRectMake(self.tabBarController.tabBar.frame.origin.x, self.tabBarController.tabBar.frame.origin.y + barre, self.tabBarController.tabBar.frame.size.width, self.tabBarController.tabBar.frame.size.height);
[UIView commitAnimations];
}
Проверено на iPhone 4S 7.0.4 (11B554a) с Xcode 4.6.3 (4H1503) и Xcode 5.0.2 (5A3005).
- 1. Черный экран, например, во время телефонного звонка
- 2. Воспроизведение аудиофайла Android во время телефонного звонка
- 3. Воспроизведение звука Android во время телефонного звонка
- 4. Местоположение не обновляется во время телефонного звонка
- 5. Прочитать аудиопоток во время телефонного звонка (GSM)
- 6. Нажатие экрана телефонного звонка в фоновом режиме во время звонка
- 7. Как сделать видимые действия во время телефонного звонка?
- 8. Как отправить нажатие клавиши adb во время телефонного звонка?
- 9. Как отправить смс в фоновом режиме во время телефонного звонка
- 10. Как отключить звук UILocalNotification во время телефонного звонка
- 11. ios посылает звук на динамики во время телефонного звонка
- 12. Воспроизведение звука во время исходящего телефонного звонка Twilio
- 13. обнаружение телефонного звонка завершено во время работы музыки в IOS
- 14. iOS - запись голоса во время телефонного звонка в Objective c
- 15. Android: обнаружение активного номера телефона во время телефонного звонка
- 16. Соединение GPRS все еще подключено во время приема телефонного звонка?
- 17. Приложение для джейлбрейка - Воспроизведение фоновой музыки во время телефонного звонка
- 18. iPhone: настройка громкости воспроизведения в приложении во время телефонного звонка
- 19. Android Text to Speech сломан во время телефонного звонка
- 20. Как запланировать событие телефонного звонка?
- 21. Отмена безответного телефонного звонка через некоторое время
- 22. Запись телефонного звонка в ios?
- 23. Twilio Say Verb во время телефонного разговора
- 24. Выполнение автоматического телефонного звонка
- 25. Выполнение телефонного звонка изнутри PhoneGap
- 26. Предотвращение телефонного звонка
- 27. Устранение телефонного звонка
- 28. Пустой экран после телефонного звонка
- 29. Управление зеленой телефонной линией звонка после завершения вызова
- 30. Iphone sdk - Как воспроизвести звук во время телефонного звонка через некоторое время?
Вы даже можете использовать расширения UIKit следующим образом: CGRect newFrame = [rectValue CGRectValue]; - так или иначе! –
Я просто хочу добавить, что соглашение NSLog и именование несколько неправильно. statusBarFrameWillChange вызывается перед statusBarFrameChanged, поэтому уведомление из statusBarFrameWillChange будет фактически значением OLD, а не новым значением. И наоборот, с другим методом. – micnguyen