在 iOS 6 中呈现模态视图

Posted

技术标签:

【中文标题】在 iOS 6 中呈现模态视图【英文标题】:Present Modal View in iOS 6 【发布时间】:2012-10-08 03:19:02 【问题描述】:

我想显示一个模态视图,但有两个问题:

    ios 6 中没有 presentModalViewController,我必须使用 presentViewController,它只是像模态序列一样显示我的第二个 ViewController,而不是没有全屏选项的模态窗口,

    我的第二个问题是如何从 UICollectionViewController 显示模态窗口。我尝试使用 presentViewController 但它只适用于 ViewController 而不是 CollectionViewController。

我想做的最好的例子就是这个(Instagram)。他们是如何制作这个模态窗口的?是因为它仍在使用旧的 iOS 版本而且还不是 iOS 6 吗?或者还有另一种方法可以从 UICollectionViewController 显示这样的模态窗口?

谢谢

【问题讨论】:

【参考方案1】:

如果我对您的理解正确,您想要实现的是将您的ViewControllers 之一呈现在父级上,并且仍然在后台看到父级ViewController

第一个解决方案:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
    vc.view.backgroundColor = [UIColor clearColor];
    self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext; //self.modalPresentationStyle might do a better job here
    [self presentViewController:vc animated:NO completion:nil];

确保您的SecondViewController 内容小于您当前的``ViewController` 并且您可以在 StoryBoard\xib 中看到它的背景颜色。背景颜色会很清晰,会产生透明效果。

第二种解决方案:

创建一个容器(iOS 6 及更高版本,如果您打算使用 Storyboard IB,低于此值将允许您创建容器,但只能逐步创建)。

将容器大小设置为父大小的 3/4,并将第二个视图控制器连接到它。而不是继续 \ 推送到您的第二个视图控制器,您可以只是

myContainer.alpha = 1; 

在屏幕上显示。

【讨论】:

【参考方案2】:

我会看一下 UIContainerView 的文档,它用于以类似于非全屏模式演示的方式将视图控制器显示为另一个视图控制器的子级。

【讨论】:

【参考方案3】:

正如您所说,presentViewController 仅适用于 UIViewController 而不是 UICollectionViewController.

然后只需在CollectionViewController的头文件中导入UIViewController类,如下所示:

#import <UIKit/UIKit.h>

@class UIViewController;

@interface MyCVController : UICollectionViewController

@end

【讨论】:

是的,但这是窗口上方的一层,如何实现? 可能是 view.window.subviews 可以帮忙

以上是关于在 iOS 6 中呈现模态视图的主要内容,如果未能解决你的问题,请参考以下文章

iOS 6 中的模态视图控制器强制横向方向

ios 8 更改呈现/模态视图控制器的大小

模态视图控制器在 iOS 7 上工作,在 iOS 6 上留下一个空白

当被模态视图控制器覆盖时,iOS 6 视图控制器布局在方向更改后不会更新

iOS8 - 呈现模态视图会删除子视图

iOS UISearchController 崩溃:应用程序试图在自身上呈现模态视图控制器