iPad:UIModalPresentationFormSheet 在横向模式下失败

Posted

技术标签:

【中文标题】iPad:UIModalPresentationFormSheet 在横向模式下失败【英文标题】:iPad: UIModalPresentationFormSheet fails on landscape mode 【发布时间】:2011-09-22 15:24:33 【问题描述】:

我们的 iPad 版本有下一个问题。

我在 UITabBar 中有一个 NavigationController。我想展示一个外观和感觉与电子邮件表单相似的表单。

我使用相同的代码来显示一个居中的模型:

// View to be displayed in the modal
AdhocViewController *controller = [[AdhocViewController alloc] initWithNibName:@"AdhocViewController" bundle:[NSBundle mainBundle]];
controller.caller = self;

// The form will need a navigation bar to cancel or save the form
UINavigationController *modalViewNavController = [[UINavigationController alloc] 
                                               initWithRootViewController:controller];

// Configurate the modal presentation and transition
modalViewNavController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
modalViewNavController.modalPresentationStyle = UIModalPresentationFormSheet;

// Show the new view
[self presentModalViewController:modalViewNavController animated:YES];

此代码在纵向模式下完美运行,但在横向模式下,视图部分显示在屏幕之外......我还没有找到解决它的方法。

我测试了我在这里找到的一些解决方案...

并尝试在预设模型视图后添加下一行以调整其大小,但没有解决

controller.view.superview.frame = CGRectMake(0, 0, 600, 700);
controller.view.superview.center = self.view.center;

有什么建议吗?

谢谢,

伊万

*** 中的引用:

iPad modalPresentationStyle UIModalPresentationFormSheet orientation problem UIModalPresentationFullScreen not working in iPad landscape mode? UIModalPresentationFormSheet on iPad in landscape mode How to resize a UIModalPresentationFormSheet?

【问题讨论】:

试试这个答案:***.com/questions/4272718/… 我会尝试...目前,我修复了纵向模式 - (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation return (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)); 卡列尼娜,我已经找到并检查了它..但没有成功...你能准确分享你使用的代码吗?谢谢 所有答案都是确保从视图控制器执行呈现视图控制器呈现。只要所有视图控制器都同意,值是多少并不重要。 我确定我是不是错了......但是在模态上使用这种方法......应该足够了。不是? - (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrient‌​ation return [caller shouldAutorotateToInterfaceOrientation:toInterfaceOrientation]; 【参考方案1】:

ios7 中,诀窍是将 modalTransitionStyle 设置为 UIModalTransitionCrossDissolve。

UIViewController *viewController = [[UIViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
navigationController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

[self presentViewController:navigationController animated:YES completion:nil];
navigationController.view.superview.frame = CGRectMake(0, 0, 800, 544);
navigationController.view.superview.center = self.view.center;

https://coderwall.com/p/vebqaq

【讨论】:

【参考方案2】:

最后代码是下一个:

// Remove the modalTransitionStyle to enable the default behaviour and change to PageSheet
modalViewNavController.modalPresentationStyle = UIModalPresentationPageSheet;
// Present the modal view and adapt the center depending of the orientation
[self presentModalViewController:modalViewNavController animated:YES];

UIDeviceOrientation _orientation = [controller interfaceOrientation];
if (UIDeviceOrientationIsPortrait(_orientation))
    modalViewNavController.view.superview.center = CGPointMake(768/2, 1024/2 + 10);
 else 
    modalViewNavController.view.superview.center = CGPointMake(768/2 - 10, 1024/2);

+10 和 -10 是因为默认情况下,modal 的 NavigationController 超出了屏幕顶部。

这是...一个蹩脚的解决方案:SS 但有效...虽然如果有人有建议会很高兴知道。

如果我需要为两个方向包含相同的中心,则可能超级视图的方向不是预期的。

在这个解决方案中,当我关闭纵向模式视图时,至少在 iPad 模拟器上,它会自动旋转到纵向模式...

最终的解决方案是在主控制器 UITabBar 上执行 presentModalViewController,并更新要在其上执行的解除方法。

[tabbar presentModalViewController:modalViewNavController animated:YES];

UIDeviceOrientation _orientation = [controller interfaceOrientation];
if (UIDeviceOrientationIsPortrait(_orientation))
    modalViewNavController.view.superview.center = CGPointMake(768/2, 1024/2 + 10);
 else 
    modalViewNavController.view.superview.center = CGPointMake(1024/2, 768/2 + 10);

终于!!!!

谢谢,

伊万

【讨论】:

【参考方案3】:

在 iOS 7 中,为了解决模态视图控制器在键盘幻影后出现在左侧的问题(我在 UIModalPresentationFormSheet 中呈现 EKEventEditViewController 时遇到的问题,我这样做了:

[self presentViewController:modalViewController animated:YES completion:^
    modalViewController.view.superview.center = self.view.center;
];

【讨论】:

以上是关于iPad:UIModalPresentationFormSheet 在横向模式下失败的主要内容,如果未能解决你的问题,请参考以下文章

不同 iPad 版本和 iPad 型号的 UI 缩放?

ipad2020屏幕多大尺寸

Ipad图标大小Ipad设置ios 5-7 29pt 1x 2x - iPad聚光灯ios 7 40 pt - iPad app ios 7 76 pt [关闭]

如何在多台 iPad 上安装 iPad 应用程序?

CSS媒体查询仅针对iPad和iPad?

iPad、iPad 2 上的边框半径问题