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

3

我有两个视图控制器,我想呈现第一个视图控制器的视图控制器(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设置了一个框架。我希望它将按照这个框架显示,但如果我添加完成块并在动画后显示它的框架,它将与第一个视图控制器相同。

编辑

我还想提到,我尝试在竖直方向上实现这个目标。


1
我专门为此创建了一个 Github 仓库 BonsaiController - Warif Akhand Rishi
2个回答

2
如果您在iPhone上尝试此操作,则呈现视图控制器的内置根视图始终是全屏的,因此您调整大小的努力将不会成功。(iPad则不同)。
只需让根视图保持原样(即不要争取它是全屏大小),但使其背景颜色为透明颜色。如果您想呈现某种自定义视图/内容/任何其他内容...例如带有某些警告或选项的较小视图。只需将其添加为根视图的子视图即可。
更新: 正如UIViewController类文档所述:
“在水平紧凑环境中,呈现的视图始终是全屏的。”
我能想象到的唯一组合是iPhone6+处于横向模式下,此时水平大小类比紧凑大。所以您运气不好,因为您想要竖屏。

据我所读,这种行为在iOS 8中可用,请阅读@matt的回答编辑或评论https://dev59.com/DVzUa4cB1Zd3GeqP5apg - Dima Deplov
EarlGrey,很抱歉,我不明白你的回答。文档中完整的短语是:“在水平紧凑的环境中,呈现的视图始终是全屏的。在水平常规的环境中,呈现取决于modalPresentationStyle属性中的值。”但是,如果我们不谈论类大小,现在我根本不使用大小类,所以我有任何宽度和任何高度。我在这里看到了关于“水平紧凑”和“水平常规”的备注,那么其他情况呢? - Dima Deplov
任何以纵向模式显示的 iPhone 都是水平紧凑型。在水平紧凑型中,第一句话适用。苹果公司选择将形态因素分类为尺寸类别,您别无选择,只能尊重它。 - Earl Grey
我明白了,你能提出什么替代方案吗? - Dima Deplov
请看我回答中的第二段,这确实是一个简单明了的解决方案。 - Earl Grey

0
为了添加Earl Grey的响应,请在将ViewController的背景颜色设置为透明之后创建一个具有以下属性设置的segue:
  • 类型为“模态呈现”
  • 演示方式为“覆盖当前上下文”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接