Модальное представление iPad FormSheet / PageSheet при повороте заполняет весь экран. - PullRequest
3 голосов
/ 17 декабря 2010

У меня есть приложение для iPad, в котором UITabBarController является корневым контроллером. На одной из вкладок у меня есть UIToolBar, который содержит UIBarButtonItem, при нажатии запускает модальное представление.

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

Я запускаю модальное представление из панели вкладок, и я установил ModalPresentationStyle в представлении, которое будет представлено.

Это влияет на ModalView, независимо от того, установлен ли я на FormSheet или PageSheet.

Кто-нибудь испытывал подобное поведение, если да, то как вы его решили?

Большое спасибо

EDIT

Я также заметил, что начиная с 4.2 при использовании страницы модального стиля / таблицы форм, представление за модальным представлением больше не затемняется - я представляю представление неправильно или это просто стандарт на 4.2?

РЕДАКТИРОВАТЬ 2

Код: По умолчанию UIViewController я просто представляю модальное представление следующим образом:

void HandleNewMsgButtonTouch(object sender, EventArgs e)
{
   PresentModalViewController(new ComposeMsgView(), true);
}

В самом модальном виде я указал в переопределении LoadView:

public override void LoadView()
{
   base.LoadView ();
   ...
   // initialser code related to the view
   ...
   View.AutoresizingMask = UIViewAutoresizing.None;
   ModalPresentationStyle = UIModalPresentationStyle.PageSheet;
   ModalTransitionStyle = UIModalTransitionStyle.CrossDissolve;
}

Я переопределил ShouldAutoRotateToInterfaceOrientation, чтобы всегда возвращать также и истину.

Независимо от того, использую ли я Formsheet / Pagesheet, они оба отображаются правильной ширины при первом запуске (в альбомной или книжной ориентации - я знаю, PageSheet заполнит портретное представление), однако при повороте модальное представление затем заполнит экран (как будто я представил ModalView с FullScreen).

Ответы [ 3 ]

4 голосов
/ 15 января 2011

Как указано в комментарии, попробуйте следующее:

void HandleNewMsgButtonTouch(object sender, EventArgs e)
{
UIViewController oController = new ComposeMsgView();
oController.ModalPresentationStyle = UIModalPresentationStyle.PageSheet; PresentModalViewController(oController, true);
}

LoadView () слишком поздно для установки свойств.

Предыдущее содержание: Пожалуйста, оставьте некоторый код.Вид определенно затемнен, также в 4.2.Я предполагаю, что вы устанавливаете стиль презентации на неправильном контроллере, потому что «PageSheet» преобразуется в полноэкранный режим в портретном режиме.

Вы должны установить стиль презентации на контроллере, который вы хотите показать в модесмотреть, а не на тот, который показывает.Поэтому, если ваш контроллер для отображения - «oToShow», а тот, который вы показываете - «oCurrent», вам придется установить стиль для «oToShow».Попробуйте установить значение FormSheet, которое всегда будет сверху и никогда не будет полноэкранным.

René

1 голос
/ 13 января 2011

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

UIModalPresentationFullScreen: Это стиль по умолчанию, и, как следует из названия, модальное представление отображается в полноэкранном режиме точно так же, как в iPhone

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

UIModalPresentationFormSheet: Ширина и высота модального вида устанавливаются так, чтобы они были меньше размера экрана. Модальное представление центрируется на экране, и незакрытые области главного контроллера представления затемнены, чтобы предотвратить взаимодействие с пользователем. Если модальное представление использует клавиатуру, модальное представление перемещается вверх, чтобы освободить место.

UIModalPresentationCurrentContext : модальное представление отображается в том же стиле, что и родительский главный контроллер представления.

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

надеюсь, это поможет Alex

0 голосов
/ 21 декабря 2010
View.AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight;
...