iOS: начальная ориентация интерфейса [UIInterfaceOrientation] игнорируется в plist - PullRequest
3 голосов
/ 15 февраля 2012

Я пытаюсь установить начальную ориентацию для моего приложения как UIInterfaceOrientationLandscapeLeft

Я не могу получить

'Initial interface orientation'[UIInterfaceOrientation]

, чтобы переопределить первый элемент в массиве

'Supported interface orientations'[UISupportedInterfaceOrientations]

Я заметил, что приложение для iphone всегда запускается с 'Portrait (нижняя домашняя кнопка)'. Массив:

'Supported interface orientations'[UISupportedInterfaceOrientations]

Portrait (bottom home button)

Landscape (left home button)

Landscape (right home button)

Как и ожидалось.

Если я включаю PORTRAIT HOMEКнопка BOTTOM на странице сводки OFF OFF BACK ON, затем порядок массива изменяется, и Portrait (нижняя кнопка home) перемещается вниз.

Landscape (left home button)

Landscape (right home button)

Portrait (bottom home button)

, и когда я запускаю приложение, оно теперь запускается в альбомной ориентации (слева).Кнопка «Домой»), так как это сейчас верхняя часть списка.Что хорошо

НО

, когда я добавляю

'Initial interface orientation'[UIInterfaceOrientation]

и устанавливаю его в

Landscape (right home button)

Его игнорируют и первый элемент в массивевместо этого используется

Landscape (left home button)

Я проверил mustAutorotateToInterfaceOrientation и блокирует только портрет вверх ногами

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    } else {
        return YES;
    }
}

Я также добавил код отладки

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if(interfaceOrientation == UIInterfaceOrientationPortrait){
        NSLog(@"shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortrait");
    }else if(interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
            NSLog(@"shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortraitUpsideDown");
    }else  if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft){
            NSLog(@"shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeLeft");
    }else if(interfaceOrientation == UIInterfaceOrientationLandscapeRight){
        NSLog(@"shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeRight");
    }else {
        NSLog(@"shouldAutorotateToInterfaceOrientation:UNKNOWN");
    }

    return YES;
}

и получаю

 shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeRight
 shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeRight
 shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeRight
 shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeRight
 shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeRight
 shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeLeft
 shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeLeft

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

'Initial interface orientation'[UIInterfaceOrientation]

и установить его на

Landscape (right home button)

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

Landscape (left home button)

я что-то не так делаю?Это простой проект Xcode Template SINGLE VIEW ... просто добавьте код отладки.

Ответы [ 2 ]

16 голосов
/ 16 октября 2012

Несмотря на документацию, UIInterfaceOrientation игнорируется. Используйте только UISupportedInterfaceOrientations. Чтобы указать, какой из них вы предпочитаете запускать, укажите first , указанный в UISupportedInterfaceOrientations.

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

1 голос
/ 13 мая 2016

Начальная ориентация интерфейса у меня не сработала. Я просто изменил последовательность в поддерживаемой ориентации интерфейса , и это сработало. enter image description here

...