在不覆盖 iPhone 上的当前视图的情况下呈现模态视图控制器
Posted
技术标签:
【中文标题】在不覆盖 iPhone 上的当前视图的情况下呈现模态视图控制器【英文标题】:Presenting a modal view controller without covering the current view on iPhone 【发布时间】:2013-12-05 02:36:23 【问题描述】:我一直在尝试添加视图容器,并在两侧留出 20 像素的空间。但这似乎不是正确的做法......
// ADD CHILD VIEW CONTROLLER
[parentViewController addChildViewController:childViewController];
[parentViewController.view addSubview:childViewController.view];
[childViewController didMoveToParentViewController:parentViewController];
// REMOVE THE CHILD VIEW CONTROLLER
[childViewController willMoveToParentViewController:nil];
[childViewController view] removeFromSuperview];
[childViewController removeFromParentViewController];
更新 我已经通过使用带有酷视图转换的 MZFormSheetController "https://github.com/m1entus/MZFormSheetController" 表单演示来解决这个问题。
【问题讨论】:
感谢您提及“MZFormSheetController”! 【参考方案1】:使用 MZFormSheetController "https://github.com/m1entus/MZFormSheetController" 带有酷炫视图转换的表单演示。
或者,ios 8 及以上,你可以使用viewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
祝你好运,如果你想要一个完整的 sn-p,请告诉我......
【讨论】:
【参考方案2】:你可以试试类似的,
DetailViewController *viewController= [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
viewController.modalPresentationStyle=UIModalPresentationFormSheet;
viewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentViewController:viewController animated:YES completion:^
viewController.view.superview.frame = CGRectMake(0, 0, 310, 500);
viewController.view.superview.center = self.view.center;
];
根据你设置superview.frame
和modalTransitionStyle
。
【讨论】:
当我展示 viewController 时它显示黑色背景。而且我认为 UIModalPresentationFormSheet 仅适用于 iPad! 在 iOS 8 之后你可以做 viewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;【参考方案3】:更好的方法是拥有自己的控制器和视图。
在主控制器上使用当前视图控制器。
[self presentViewController:myController animated:YES completion:nil];
在 viewDidLoad 上调整 myController 框架。
CGRect newFrame = self.view.frame;
newFame.size.width -= 40;
newFame.size.height -= 40;
newFrame.origin.x = 20;
newFrame.origin.y = 20;
self.view.frame = newFrame
添加为 childViewController 是为了包含视图控制器,当您想要一个具有多个视图的控制器时,每个控制器都有自己的控制器。
https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html
【讨论】:
【参考方案4】:你走对了。但是你必须在故事板上永久添加容器视图,然后你可以通过setHidden:
方法显示/隐藏它。
您还可以通过此方法显示第二个控制器。
【讨论】:
你是对的,但它不会像这个应用程序那样正确......我确信某处有代码可以在 iPhone 上呈现 UIModalPresentationFormSheet @MazenKasserUIModalPresentationFormSheet
仅适用于 iPad。您必须阅读 Apple 编写的 iOS UI 指南。我想你还没有。即使你找到这样的方法,Apple 也会限制你的应用,因为它不是实现愿望的 UI 指南。
一切皆有可能,有大量自定义 Apple API 的第三方库。放轻松,Apple 不会因为这样的事情拒绝该应用程序……顺便说一句,我从 2009 年开始就读过那本书,儿子,你应该赶上来
@MazenKasser 我们在 iPhone 中谈论的是UIModalPresentationFormSheet
,对吗?放松父亲 我刚刚说过,如果您找到在 iPhone 上使用UIModalPresentationFormSheet
的方法,Apple 会限制应用程序事件。没有关于第 3 方实施的说法。【参考方案5】:
在 iPhone 和 iPod touch 上,呈现的视图始终是全屏的。因此,它不能呈现非全屏视图控制器。
不呈现视图控制器,将视图控制器的视图作为子视图添加到父视图控制器。所以,你可以控制外观,甚至是它下面的阴影层。
【讨论】:
这个概念是正确的,但代码不能按预期工作。首先,子视图位于根视图控制器的 navigationController 下,所以我不得不隐藏它并添加一个导航栏......我想我现在应该坚持我自己的代码......无论如何谢谢以上是关于在不覆盖 iPhone 上的当前视图的情况下呈现模态视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 presentViewController 的情况下以模态方式呈现自定义视图?
是否可以在不使背景变暗的情况下在 iPad 上呈现模态视图控制器?