Конфликт пейзаж / портрет - iOS - PullRequest
1 голос
/ 25 октября 2010

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

сценарий.

У меня есть простой tableView. и с панелью поиска в titleView элемента навигации. Панель поиска добавляется в заголовок navItems через элемент uibarbuttonite на панели инструментов контроллеров представления.

СЕЙЧАС, обычно

После запуска панели поиска с помощью [beginResponder] появляется клавиатура. И он отправляет уведомление «KeyboardDidShow», где я вычисляю высоту UIKeyboard и соответственно устанавливаю высоту tableView (Сократите его).

ON Вращение - туда и сюда пейзаж / портрет, все работает отлично. - (void) didRotateInferfaceOrientation вызывается и все происходит.

Вот в чем проблема.

Когда клавиатура активна, у нее есть кнопка Google «поиск», это открывает новый вид - webviewcontroller.

проблема в том, что это

Когда [PORTRAIT] ViewController [SearchBar с активной клавиатурой] -> нажмите Поиск -> [Portrait] WebViewController -> Изменить ориентацию устройства на [Landscape] -> [Landscape]. WebViewController меняется на ландшафт --- > ЗДЕСЬ ПРОБЛЕМА, пользователь возвращается к uiViewController [Пейзаж]

метод -didRotatefromInterfaceOrientation не вызывается. и почему-то высота tableView испорчена. Хотя вид вращается отлично.

Есть ли что-то, чего мне здесь не хватает ..

был бы признателен за любую помощь. .THANKS

Ответы [ 3 ]

1 голос
/ 25 октября 2010

Когда пользователь нажимает назад, -didRotatefromInterfaceOrientation не будет вызываться. Вам необходимо проверить ориентацию в viewWillAppear (или вызвать viewDidLoad, прежде чем вернуться из касания назад), а затем вызвать правильный макет для выбранной ориентации.

Во всех ваших (BOOL) метках shouldRotate ... вы должны вызывать отдельный метод, чтобы убедиться, что ваш макет соответствует ориентации устройства.

0 голосов
/ 26 октября 2010

У меня недавно была похожая проблема в одном из моих приложений, не совсем наша проблема, но не беспокойтесь, вы должны увидеть, к чему я стремлюсь: я хотел просто повернуть viewController, отображаемый с использованием presentModalViewController ...не очень хорошо работал, особенно на старом iPhone с ОС до iOS 4 ... Так что мне нужно было вращаться программно!Просто получите свой размер экрана, используйте CGAffineTransform или что-то в этом роде и измените размеры, и тогда все будет готово ... Если вам интересно, я мог бы опубликовать кучу кода, так что дайте мне знать!1003 *

UIScreen *screen = [UIScreen mainScreen];
        myController.view.bounds = CGRectMake(0, 0, screen.bounds.size.height, screen.bounds.size.width - 20);
        if(currentOrientation == UIDeviceOrientationLandscapeRight){
            myController.view.transform = CGAffineTransformConcat(myController.view.transform, CGAffineTransformMakeRotation(degreesToRadian(-90)));

        }else{
            myController.view.transform = CGAffineTransformConcat(myController.view.transform, CGAffineTransformMakeRotation(degreesToRadian(90)));

        }
        myController.view.center = window.center;
        [[UIApplication sharedApplication] setStatusBarOrientation:currentOrientation];
        [self.window addSubview:self.tabBarController.view];
        [self.window bringSubviewToFront:self.tabBarController.view];
        [self.window addSubview:myController.view];
        [self.window bringSubviewToFront:myController.view];
        [self.tabBarController.view removeFromSuperview];`

Сюда также входит удаление TabBar при повороте на альбомную, чтобы получить больше места ... наслаждайтесь:)

0 голосов
/ 26 октября 2010

Вы можете вызвать didRotateFromInterfaceOrientation вручную для viewWillAppear и просто передать ориентацию самостоятельно (т. Е. [UIApplication sharedApplication] .statusBarOrientation).

...