UIActionSheet не будет отображаться правильно в ландшафтном режиме - PullRequest
3 голосов
/ 12 сентября 2010

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

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

Я устанавливаю ориентацию строки состояния следующим образом ...

[[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];

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

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

Редактирование / решение: Принудительное отображение листа действия в ландшафтном режиме

Вот как мне удалось заставить его работатьЯ создал альбомный вид и добавил его в главное окно следующим образом:

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];
}

Во многом благодаря tc.для направления меня в правильном направлении здесь.

Ответы [ 2 ]

13 голосов
/ 06 октября 2010

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

[actionSheet showInView:[self.view]];

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

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

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

2 голосов
/ 12 сентября 2010

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

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

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