8

я себе задаю этот вопрос потому, что после большой исследовательской почти 2days из Googling, Stack Переполненная и т.д ...Строка состояния обновления IOS в вызову ViewController представлены modaly на экране

Мой вопрос заключается в следующем: я м представляя ViewController от моего основного ViewController так:

UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:VController]; 
navigation.transitioningDelegate = self; 
navigation.modalPresentationStyle = UIModalPresentationCustom; 

[self presentViewController:navigation 
        animated:YES 
       completion:nil]; 

всякий раз, когда пользователь iPhone в вызове, или использует свой телефон в качестве точки доступа, строка состояния увеличивается толкая мой modaly представил VC на дно но origin установлено в (0; 0) Проблема заключается в том, когда пользователь заканчивает вызов, когда он находится в моей строке состояния приложения, изменяя размер до нормального но Modal VC не двигался вверх.

enter image description here

Я знал об этом, когда это происходит в коде благодаря этому уведомлению:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statuBarChange:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil]; 

Самое страшное в том, что кадры Corect и происхождение до сих пор (0,0)

Есть ли способ для обновления модальных представленных vc? с тем, чтобы рассеять и представить его снова?

+0

Почему вы голосуете? Я написал этот вопрос, чтобы найти и ответить. Нет ничего похожего на поведение, представленное модальной шкалой состояния VC и inCall. Если вы проголосуете, пожалуйста, объясните, почему, тогда я могу с этим поговорить. – Shial

ответ

0

Вам действительно нужен специальный переход для этого модального? Если нет, удалите строку «navigation.modalPresentationStyle = UIModalPresentationCustom», и вам хорошо идти.

Если вам нужен пользовательский стиль, это известная ошибка с стилем UIModalPresentationCustom в iOS 8+ и в строке состояния. AFAIK, вам придется взломать это с помощью animateTransition и перетащить рамки вокруг в нужные места.

Существует также ужасный взлом для этого, используя willChangeStatusBarFrame в делегате приложения ниже. Вы можете улучшить его, обнаружив, что на самом деле есть модальный вариант и оживление изменения.

- (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame 
{ 
    if (newStatusBarFrame.size.height < 40) { 
     for (UIView *view in self.window.subviews) { 
      view.frame = self.window.bounds; 
     } 
    } 
} 

Другой альтернативой является, чтобы сделать модальное крышку в строке состояния, и переопределить prefersStatusBarHidden для этого вида контроллера.

Ненавижу все эти решения, но он должен дать вам что-то работоспособное в зависимости от того, как настроен ваш проект, и если вы не можете игнорировать это небольшое пространство для временного модального диалога.