iPad表单视图/页面视图模态视图,在旋转时填充整个屏幕。

4
我有一个iPad应用程序,它的根控制器是UITabBarController。其中一个选项卡中有一个UIToolBar,其中包含一个UIBarButtonItem,单击后会启动模态视图。
模态视图在首次启动时以正确的大小显示(无论是横屏还是竖屏),但如果您旋转设备,则模态视图将扩展以填充整个屏幕-无论您从那一点开始旋转设备的程度如何。
我从标签栏中启动模态视图,并将ModalPresentationStyle设置为要呈现的视图。
这会影响ModalView,无论我将其设置为FormSheet还是PageSheet
有人遇到过类似的问题吗?如果是,您是如何解决的?
非常感谢
编辑:
我还注意到自从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,始终返回true。

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

3个回答

5

根据评论中的说法,请尝试以下方法:

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é


请查看最新编辑的代码示例 - 就我所知,我已经正确地呈现了视图(即在我呈现的视图控制器中设置了展示样式)。 - Luke
你尝试过这个吗:void HandleNewMsgButtonTouch(object sender, EventArgs e) { UIViewController oController = new ComposeMsgView(); oController.ModalPresentationStyle = UIModalPresentationStyle.PageSheet; PresentModalViewController(oController, true); } - Krumelur
我刚刚尝试了一下,它完美地运行了。如果你把它作为答案,我会标记它为正确的。非常感谢! - Luke
那么我是否获得了赏金?如果你今天不分发,其中一半将会丢失。 - Krumelur
抱歉让你等待了,昨晚我遇到了车祸问题,用掉了我大部分的时间。现在你已经获得了奖金 :) - Luke

2

你可以通过使用不同的样式来解决这个问题,比如:

UIModalPresentationFullScreen:这是默认样式,正如其名称所示,会使模态视图以与iPhone完全相同的全屏方式呈现。

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

UIModalPresentationFormSheet:模态视图的宽度和高度都设置为小于屏幕尺寸。模态视图位于屏幕中心,并且主视图控制器的未覆盖区域被淡化以防止用户交互。如果模态视图使用键盘,则将模态视图向上移动以腾出空间。

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

还要记得调整大小和位置,否则它将始终以PageFormSheet的默认大小显示。

希望这可以帮到你 Alex


我可能应该在问题中澄清一下,我已经将ModalPresentationStyle设置为FormSheet或PageSheet之一。当首次启动时,任何一个都显示正确的大小,但当旋转后,它会填满整个屏幕。 - Luke
哦,好的,你能发一下你用来创建和展示模态视图的代码吗?让我们看看能否解决这个问题 :) - dalexsoto
请查看最新编辑,我已添加用于呈现模态视图的基本代码。 - Luke

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接