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)toInterfaceOrientation 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设置ios 5-7 29pt 1x 2x - iPad聚光灯ios 7 40 pt - iPad app ios 7 76 pt [关闭]