iPad FormSheet/PageSheet模式视图,当旋转填充整个屏幕时.T

问题描述:

我有一个iPad应用程序,它有一个UITabBarController作为根控制器。从其中一个选项卡中,我有一个UIToolBar,其中包含一个UIBarButtonItem,点击后会启动模态视图。iPad FormSheet/PageSheet模式视图,当旋转填充整个屏幕时.T

模式视图首次启动时(横向和纵向)均以正确的大小显示,但如果旋转设备,则模式视图将展开以填充屏幕 - 无论您从中旋转设备多少点起。

我从标签栏启动模态视图,并在视图中设置了ModalPresentationStyle

这会影响ModalView,不管我是否将其设置为FormSheetPageSheet

有没有人经历过类似的行为,如果是的话,你是如何解决它的?

非常感谢

编辑

我也注意到,由于4.2采用莫代尔风格页/港前赛绩时背后的模态视图视图不会变暗出来了 - 我会提出视图错误还是这只是4.2的标准?

EDIT 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来alw ays也是如此。

无论我是否使用Formsheet/Pagesheet,它们在首次启动时都显示正确的宽度(无论是横向还是纵向 - 我知道PageSheet将填充纵向视图),但是在旋转时,模态视图将会填充屏幕(就像我用FullScreen呈现了ModalView一样)。

正如评论指出,试试这个:

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

的loadView()是来不及设置的属性。

上一个内容: 请张贴一些代码。这个观点在4.2中也绝对暗淡了。 我假设您将演示文稿样式设置在错误的控制器上,因为在纵向模式下,“PageSheet”会转换为全屏。

您必须在您想在moda视图中显示的控制器上设置演示风格,而不是在显示的控制器上演示风格。因此,如果要显示的控制器是“oToShow”,而您显示的是“oCurrent”,则必须设置“oToShow”的样式。 尝试将其设置为FormSheet,该FormSheet始终位于顶部,永远不会全屏显示。

René

+0

请查看代码示例的最新编辑 - 据我所知,我已经正确呈现视图(即,在我呈现的视图控制器中设置呈现样式)。 – Luke 2011-01-17 09:27:01

+0

您是否尝试过: void HandleNewMsgButtonTouch(object sender,EventArgs e) UIViewController oController = new ComposeMsgView(); oController.ModalPresentationStyle = UIModalPresentationStyle.PageSheet; PresentModalViewController(oController,true); } – Krumelur 2011-01-17 09:31:29

+0

我只是试过,它的工作就像一个魅力。如果你让它成为答案,我会标记它是正确的。非常感谢! – Luke 2011-01-17 10:17:22

View.AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight; 
+0

恐怕这不起作用 - 但谢谢! – Luke 2010-12-22 09:51:03

你可以解决它通过使用不同的风格,像

UIModalPresentationFullScreen:这是默认的风格,顾名思义导致模态视图被精确地呈现全屏幕与iPhone

UIModalPresentationPageSheet:模式视图占用全屏高度,但宽度设置为纵向模式下屏幕的宽度。这意味着当设备处于肖像模式时,它仍占用全屏。然而,在横向模式下,它会让一些底层主视图仍然可见,但会变暗,因为用户无法与未覆盖的主视图控制器进行交互。

UIModalPresentationFormSheet:模态视图的宽度和高度均设置为小于屏幕大小。模态视图集中在屏幕上,主视图控制器的未覆盖区域变暗以防止用户交互。如果模态视图使用键盘,则模态视图会向上移动以腾出空间。

UIModalPresentationCurrentContext:使用与父母视图控制器相同的样式显示模式视图。

还记得调整大小和位置,因为否则它总是以PageFormSheet的默认大小显示。

希望这有助于 亚历

+0

我可能应该在问题中澄清过,我已经将ModalPresentationStyle设置为FormSheet或PageSheet。第一次启动时或者显示正确的大小,当它旋转时它会填满屏幕。 – Luke 2011-01-14 09:07:10

+0

哦,你可以发布你正在使用的代码来创建和呈现modalview吗?让我们看看如果我们可以弄清楚这个:) – dalexsoto 2011-01-14 15:31:58

+0

请看最新的编辑,我已经添加了我用来呈现模态视图的基本代码 – Luke 2011-01-17 09:27:48