Возникли проблемы с ориентацией интерфейса на iPad - PullRequest
0 голосов
/ 08 августа 2011

Я помогаю с приложением для iPad на Xcode 4. Я знаю, что есть

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

, который должен возвращать YES, если вы хотите поддерживать все ориентации. Ранее приложение зависло в ландшафтном режиме. Я пытаюсь изменить взгляды, чтобы поддержать все ориентации. Поэтому я изменил вхождения этого метода, чтобы он возвращал YES вместо YES только для ориентации LandscapeLeft и LandscapeRight. Однако, когда я пытаюсь сделать это:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
            NSLog(@"%i, %s", self.interfaceOrientation, __FUNCTION__);
}

Я всегда получаю 3 или 4 в консоли, которые являются двумя альбомной ориентацией. Когда вы щелкаете по значку проекта, я проверил страницу «Сводка», и все ориентации устройства поддерживаются. В файле .plist перечислены все ориентации. Есть ли другое место, где это могло бы быть установлено, что я пропускаю? Спасибо.

1 Ответ

0 голосов
/ 09 августа 2011

У меня была такая же проблема при работе с пользовательскими контроллерами навигации, которые представляют дочерние контроллеры представления.В моем случае я использую табличное представление для представления элементов в сетке, и мне нужно, чтобы в моих ячейках табличного представления отображалось различное количество элементов в зависимости от ориентации.Вот обходной путь, который я нашел:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    // we have to use self.view.window.rootViewController.interfaceOrientation because for some reason
    // self.interfaceOrientation isn't updating.  That's what I get for using custom navigation, I guess.
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
    if (!self.isViewLoaded) {
        return;
    }
    if (self.view.window) {
        if (UIInterfaceOrientationIsPortrait(self.view.window.rootViewController.interfaceOrientation) != UIInterfaceOrientationIsPortrait(fromInterfaceOrientation)) {
            // if we are rotating between portrait and landscape, we'll have to reload the data
            [self.tableView reloadData];
        }
    } else {
        self.needsReloadData = YES;
    }
}

Считывая ориентацию из корневого контроллера вида окна, вы получаете надежный способ определения фактической ориентации устройства.К сожалению, если представление контроллера представления было удалено из текущего окна, self.view.window вернет nil, поэтому в этом случае я должен поднять флаг и обработать его в viewDidAppear.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...