我有一个iPad应用程序,它有一个 UITabBarController
作为根控制器 . 从其中一个标签中,我有一个包含 UIBarButtonItem
的 UIToolBar
,点击后会启动模态视图 .
模态视图在首次启动时显示正确的大小(横向和纵向)但是如果旋转设备,则模态视图将展开以填充屏幕 - 无论您从该点开始旋转设备多少 .
我'm launching the modal view from the tab bar and I'已在要显示的视图中设置 ModalPresentationStyle
.
无论我是将其设置为 FormSheet
还是 PageSheet
,这都会影响ModalView .
有没有人经历过类似的行为,如果是这样,你是如何解决的?
非常感谢
EDIT
我也注意到,自从4.2使用模态样式页面/ FormSheet后,模态视图背后的视图不再变暗 - 我是否认为视图错误或仅仅是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
以便始终返回true .
无论我是否使用Formsheet / Pagesheet,它们在首次启动时都显示正确的宽度(无论是横向还是纵向 - 我知道PageSheet将填充纵向视图)但是在旋转时,模态视图将填充屏幕(如如果我用FullScreen呈现ModalView) .
3 回答
如评论中所述,试试这个:
LoadView()为时已晚,无法设置属性 .
上一内容:请发一些代码 . 视图肯定是暗淡的,也是4.2 . 我假设您在错误的控制器上设置演示样式,因为在纵向模式下“PageSheet”会转换为全屏 .
您必须在要在moda视图中显示的控制器上设置演示文稿样式,而不是在IS显示的那个上 . 因此,如果要显示的控制器是“oToShow”,而您显示的控制器是“oCurrent”,则必须为“oToShow”设置样式 . 尝试将其设置为FormSheet,它始终位于顶部,永远不会全屏 .
勒内
你可以通过使用不同的风格来解决它
UIModalPresentationFullScreen: 这是默认样式,顾名思义导致模态视图全屏显示,与iPhone完全一致
UIModalPresentationPageSheet: 模态视图占据整个屏幕高度,但宽度设置为纵向模式下屏幕的宽度 . 这意味着当设备处于纵向模式时,它仍然占据整个屏幕 . 但是在横向模式下,它会使某些基础主视图仍然可见,但由于用户无法与未覆盖的主视图控制器进行交互而变暗 .
UIModalPresentationFormSheet: 模态视图的宽度和高度均设置为小于屏幕大小 . 模态视图以屏幕为中心,主视图控制器的未覆盖区域变暗以防止用户交互 . 如果模态视图使用键盘,则模态视图向上移动以腾出空间 .
UIModalPresentationCurrentContext :使用与父主视图控制器相同的样式显示模态视图 .
还记得调整大小和位置,因为它总是以PageFormSheet的默认大小显示 .
希望这有助于Alex