iPad FormSheet / PageSheet模态视图,旋转时填满整个屏幕.T

时间:2010-12-17 12:39:07

标签: ipad rotation xamarin.ios modalviewcontroller

我有一个iPad应用程序,它有一个UITabBarController作为根控制器。在其中一个标签中,我有UIToolBar,其中包含UIBarButtonItem,点击后会启动模态视图。

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

我正在从标签栏启动模态视图,并且我已在要显示的视图中设置ModalPresentationStyle

这会影响ModalView,无论我将其设置为FormSheet还是PageSheet

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

非常感谢

修改

我也注意到,自从4.2使用Modal Style Page / FormSheet后,模态视图背后的视图不再变暗 - 我是否认为视图错误或仅仅是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以便始终返回true。

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

3 个答案:

答案 0 :(得分:4)

正如评论中所述,试试这个:

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

LoadView()为时已晚,无法设置属性。

上一内容: 请发一些代码。视图肯定是暗淡的,也是4.2。 我假设您在错误的控制器上设置演示样式,因为在纵向模式下“PageSheet”会转换为全屏。

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

答案 1 :(得分:1)

你可以使用不同的风格来解决它,比如

UIModalPresentationFullScreen:这是默认样式,顾名思义导致模态视图全屏显示,与iPhone完全一致

UIModalPresentationPageSheet:模态视图占据整个屏幕高度,但宽度设置为纵向模式下屏幕的宽度。这意味着当设备处于纵向模式时,它仍然占据整个屏幕。但是在横向模式下,它会使一些基础主视图仍然可见,但由于用户无法与未覆盖的主视图控制器进行交互而变暗。

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

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

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

希望这会有所帮助 亚历

答案 2 :(得分:0)

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