iPhone、iOS 8:如何呈现比原始视图控制器更小的视图控制器?

iPhone、iOS 8:如何呈现比原始视图控制器更小的视图控制器?,ios,iphone,swift,uiviewcontroller,presentviewcontroller,Ios,Iphone,Swift,Uiviewcontroller,Presentviewcontroller,我有两个视图控制器,我想展示第一个VC的视图控制器(VC)。第二,VC的规模较小。我想在第一个视图控制器上显示第二个视图控制器。像爆米花。您可以想象,如果我们添加另一个从下到上滑动但在导航栏处停止的视图控制器 这是我的密码: @IBAction func showSecondVC(sender: AnyObject) { let secondViewController = storyboard?.instantiateViewControllerWithIde

我有两个视图控制器,我想展示第一个VC的视图控制器(VC)。第二,VC的规模较小。我想在第一个视图控制器上显示第二个视图控制器。像爆米花。您可以想象,如果我们添加另一个从下到上滑动但在导航栏处停止的视图控制器

这是我的密码:

@IBAction func showSecondVC(sender: AnyObject) {
            
    let secondViewController = storyboard?.instantiateViewControllerWithIdentifier("SecondViewController") as! SecondViewController
    
    secondViewController.view.frame = CGRect(origin: CGPoint(x: view.frame.origin.x, y: header.frame.height), size: CGSize(width: view.frame.width, height: view.frame.height - header.frame.height))

    secondViewController.definesPresentationContext = true
    secondViewController.providesPresentationContextTransitionStyle = true
    
    secondViewController.modalPresentationStyle = UIModalPresentationStyle.CurrentContext
           
    self.presentViewController(secondViewController, animated: true, completion:nil)


}
您可以看到,我为
secondViewController
设置了帧。我想它将与此帧,但如果我添加完成块并在动画后显示它的帧,它将与第一个视图控制器相同

编辑
我还想提到的是,我尝试在纵向方向上进行此操作。

如果您在iPhone中尝试此操作,则呈现视图控制器的内置根视图将始终是全屏的,因此您调整其大小的努力将不会成功。(iPad是另一回事)

只需让根视图保持原样(即,不要反对它的全屏大小),而是使其背景色清晰。如果您想显示某种自定义视图/内容/无论它是什么..例如带有一些警告..或一些选项的较小视图。只需将其添加为根视图的子视图

更新: 正如UIViewController类文档所述:

在水平紧凑的环境中,显示的视图始终为全屏


我能想象的唯一一种组合就是Iphone6+在横向模式下,横向尺寸等级比紧凑型更大。所以你运气不好,因为你想要肖像。

在将ViewController的背景色设置为“清除”后,添加Earl Grey的响应。创建具有以下属性集的segue:

  • “以模态呈现”的亲切
  • 向“当前上下文”演示

据我所知,这种行为在iOS 8中可用,阅读@matt answer edit或comments EarlGrey,对不起,我没有得到您的答案。文档中的完整短语:“在水平紧凑的环境中,显示的视图始终是全屏的。在水平规则的环境中,显示取决于modalPresentationStyle属性中的值。”,但是如果我们不讨论类大小,现在我根本不使用大小类,所以我有任何宽度和高度。我在这里看到了关于
水平紧凑型
水平常规型
的评论,其他手机壳呢?任何处于纵向模式的iPhone都是水平紧凑型的。在水平压缩中,第一句话适用。苹果公司选择将形状因素分类为尺寸等级。你别无选择,只能尊重它。我明白了,你能提出什么替代方案?请看我回答中的第二段,这确实是一个简单明了的解决方案。我做了一个Github回购协议就是为了这个。