Вопрос: iOS в режиме просмотра состояния панели управления представлением отображается модальность на экране


Я могу задать этот вопрос, потому что после крупных исследований почти 2 дня Googling, Stack Overflowing и т. Д. ...

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

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

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

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

enter image description here

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

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

Хуже всего то, что кадры являются corect и origin все еще (0,0)

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


8


источник


Ответы:


Вам действительно нужен специальный переход для этого модального? Если нет, удалите строку «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 для этого контроллера представления.

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


0