2010-09-12 4 views
3

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

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

Я устанавливаю ориентацию бара статуса, как так ...

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:NO]; 

Когда я нахожусь в «ландшафтном режиме», а в строке состояния всегда отображается правильно. Если я отображу AlertView, он также отобразится правильно. Затем я показываю рабочий лист следующим образом:

UIActionSheet *as = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel Button" destructiveButtonTitle:nil otherButtonTitles: @"button", nil];  
as.actionSheetStyle = UIActionSheetStyleBlackOpaque; 
[as showInView:self.view]; 
//[as showFromToolbar:toolbar]; 

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

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeLeft]; 

Кто-нибудь есть идеи, почему лист действий может отображаться в неправильном положении, но с правильными элементами управления? Или как заставить таблицу действий отображать в определенной позиции. Я бы предпочел не использовать собственную версию листа действий, чтобы он отображался правильно.

Заранее спасибо.

Редактировать/Решение: Action Force листа, чтобы показать в ландшафтном режиме

Вот как я сумел заставить его работать, я создал пейзажную и добавить его к моему главному окну так:

landscapeView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 480, 480)]; 
landscapeView.transform = CGAffineTransformMakeRotation((-1)*M_PI/2); 
landscapeView.bounds = CGRectMake(0, 0, 480, 380); 
[appDelegate.window addSubview:landscapeView]; 

, а затем отображается мое действие листа, как этого

if (landscape) { 
    [menu showInView:landscapeView]; 
} else { 
    [menu showInView:self.view]; 
} 

Большое спасибо дц. для указания меня в правильном направлении.

+0

Почему вы используете 380 вместо 320? 'CGRectMake (0, 0, 480, 380);' – mahboudz

+0

просто любопытно: почему вы делаете это как (-1) * M_PI, чтобы сделать его отрицательным, когда вы можете просто поместить его как -M_PI? – SpaceDog

+0

@mahboudz: Я не помню в момент tbh, может быть опечатка. – katbyte

ответ

2

Общая «ориентация интерфейса» также охватывает такие вещи, как преобразование текущего вида, независимо от того, что думает UIViewController, - текущая ориентация и, возможно, другие вещи; просто установка ориентации строки состояния не всегда достаточна.

Является ли self.view в портретной ориентации?

+0

Большое спасибо за то, что указали мне в правильном направлении, это было не так, и я попытался показать его с помощью ориентированной на ландшафт панели инструментов, но это не сработало. Однако кажется, что добавление пейзажного вида в окно приложения, чтобы отображать его из работы, просто отлично! – katbyte

+0

Ewwwwwww;) будьте готовы к тому, чтобы он разбился странными и таинственными способами! –

13

У меня была аналогичная проблема. У меня была кнопка на моей панели инструментов, которая отображала лист действий. Код для отображения Листа действия был в моем корневом контролере. Она отображается неправильно в ландшафтном режиме с этим кодом:

[actionSheet showInView:[self.view]]; 

Это изменение исправил вопрос:

[actionSheet showInView:[self.navigationController view] ]; 

Похоже, что ActionSheet получает ее ориентации с точки зрения перешедшей в ShowInView и мой RootViewController был в портретном хотя мой текущий вид был в Пейзаже. По крайней мере, это моя теория.

Смежные вопросы