UIOrientation не работает при запуске приложения в ландшафтном режиме - PullRequest
1 голос
/ 10 января 2012

Я создал приложение для поддержки всех ориентаций.

Также я создал таблицу и панель поиска в методе viewDidLoad (без использования xib). Я также написал следующий код для настройки позиционирования таблицы и панели поиска.

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

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

Также для обеспечения правильной ориентации я написал NSLog внутри этого метода, и он показывает мне правильное значение.

Также, чтобы этот метод (adjustViewsForOrientation) вызывался явно, я также вызвал метод в viewDidLoad.

[self adjustViewsForOrientation:self.interfaceOrientation];

Вот фрагмент кода:

- (void) adjustViewsForOrientation:(UIInterfaceOrientation)orientation {
    if (orientation == UIInterfaceOrientationLandscapeLeft || 
            orientation == UIInterfaceOrientationLandscapeRight) {
        aTableView.frame = CGRectMake(705, 220, 320, 280);
        sBar.frame=CGRectMake(805, 0, 220, 40);
        NSLog(@"inside landscape");        
    }
    else if (orientation == UIInterfaceOrientationPortrait || 
                 orientation == UIInterfaceOrientationPortraitUpsideDown) {
        aTableView.frame = CGRectMake(450, 220, 320, 280);
        sBar.frame=CGRectMake(550,3,220,40);
    }
}

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
                                 duration:(NSTimeInterval)duration {
    // [self adjustViewsForOrientation]
    [self adjustViewsForOrientation:toInterfaceOrientation];
    NSLog(@"landscap");
}

1 Ответ

0 голосов
/ 10 января 2012

Попробуйте этот подход, это может помочь.Зарегистрируйтесь для UIDeviceOrientationDidChange в методе viewDidLoad:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(adjustViewsForOrientation:) name:UIDeviceOrientationDidChangeNotification object:nil];

, а также измените -(void) adjustViewsForOrientation:(UIInterfaceOrientation)orientation

на -(void) adjustViewsForOrientation:(NSNotification *)notification

и получите новую ориентацию,получение значения ориентации

например UIDeviceOrientation newDeviceOrientation = [notification orientation];

...