Я пытаюсь отобразить 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];
Кто-нибудь знает, почему таблица действий может отображаться в неправильном положении, но с правильными элементами управления? Или как заставить таблицу действий отображаться в определенной позиции. Я бы предпочел не реализовывать свою собственную версию таблицы действий, чтобы она отображалась правильно.
Заранее спасибо.
Изменить / Решение: принудительно отображать лист действий в альбомной ориентации.
Вот как мне удалось заставить его работать, я создал альбомный вид и добавил его в свое главное окно вот так:
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. за то, что указали мне здесь правильное направление.
CGRectMake(0, 0, 480, 380);
- person mahboudz   schedule 12.11.2011