Использование контроллера навигации в контроллере TabBar Iphone 6+ IOS 8.3

Недавно я столкнулся с проблемой в своем приложении на iphone 6+ IOS8.3. Проблема в том, что я использую uitabbarController в своем приложении, и каждая вкладка контроллера панели вкладок содержит uinavigationController.

Теперь, когда я выбираю 6-ю/7-ю вкладку, перейдя на вкладку «Дополнительно», а затем поворачиваю экран, появляется черный экран.

Чтобы проверить сценарий, я сделал отдельное приложение и сделал ту же структуру, то есть сделал 9 вкладок, и каждая вкладка содержит контроллер навигации. Все это делается на раскадровке, и код не пишется.

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

Я прилагаю снимки экрана для дальнейшего объяснения.

i Создайте фиктивное приложение с 9 вкладками, на каждой вкладке есть UinavigationController. Нажмите

выберите 6-ю вкладку (вторая вкладка на вкладке

Поверните устройство, появится черный экран.

Так кто-нибудь может сказать, почему он превращается в черный экран? Я делаю это неправильно? или Это баг IOS8.3 или что-то еще?


person Abuzar Amin    schedule 09.06.2015    source источник
comment
Я столкнулся с той же проблемой, и мой moreviewcontroller реагирует таким же образом в iOS9.1. Есть ли у вас какие-либо обновления по этому поводу?   -  person Peter Grundner    schedule 03.11.2015
comment
Нет, еще нет, я также сообщил об этом Apple, когда IOS 9 находилась в стадии бета-тестирования. Но это не разрешено в IOS 9   -  person Abuzar Amin    schedule 05.11.2015


Ответы (1)


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

  1. В вашем подклассе UITabbarController подпишитесь на события ротации:

    [[NSNotificationCenter defaultCenter] addObserver:self                                          //Add yourself as an observer
                                         selector:@selector(orientationChanged:)
                                             name:UIDeviceOrientationDidChangeNotification
                                           object:[UIDevice currentDevice]];
    
  2. Добавьте следующий код в метод наблюдения за вращением:

    - (void) orientationChanged:(NSNotification *)notification {
        if (IS_IPHONE_6P) { // some magic to figure out if we're on iphone 6 plus
            self.customizableViewControllers = @[]; // we don't want an edit button to appear
            if (self.selectedIndex == 5 || self.selectedIndex == 6) { // the effect only happens to view controllers at index 5 and 6.
                [self.moreNavigationController popToRootViewControllerAnimated:NO]; // pop the view controller from the moreNavigationViewController
                self.selectedViewController = self.viewControllers[self.selectedIndex]; // set the selected view controller to be visible again.
            }
        } 
    }
    
person Peter Grundner    schedule 03.11.2015