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

Posted

技术标签:

【中文标题】iPhone,iOS 8:如何呈现比原始视图控制器更小的 ViewController?【英文标题】:iPhone, iOS 8: How to presentViewController smaller than original view controller? 【发布时间】:2015-03-02 23:23:41 【问题描述】:

我有两个视图控制器,我想展示第一个 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设置了框架。我希望它将与此帧一起使用,但如果我添加完成块并在动画后显示它的帧,它将与第一个 View Controller 相同。

编辑

我还想提一下,我尝试将其设为纵向。

【问题讨论】:

我为此做了一个 Github repo BonsaiController。 【参考方案1】:

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

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

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

“在水平紧凑的环境中,呈现的视图始终是全屏的。”

我能想象到的唯一组合是横向模式下的 Iphone6+,其中水平尺寸类比紧凑型更大。所以你运气不好,因为你想要肖像。

【讨论】:

如我所见,此行为在 ios 8 中可用,请阅读 @matt answer edit 或 cmets ***.com/questions/7923927/… EarlGrey,很抱歉,我没有得到您的答复。来自 docs 的完整短语:“在水平紧凑的环境中,呈现的视图始终是全屏的。在水平规则的环境中,呈现取决于 modalPresentationStyle 属性中的值。”,但是如果我们不谈论类怎么办尺寸,现在我根本不使用尺寸类,所以我有任何宽度任何高度。我在这里看到关于horizontally compacthorizontally regular 的评论,其他情况呢? 任何 iPhone 在纵向模式下都是横向紧凑的。在水平紧凑中,第一句适用。苹果选择了尺寸等级的外形尺寸分类。你别无选择,只能尊重它。 我明白了,您能提出什么替代方案? 在我的回答中查看我的第二段,这确实是一个简单明了的解决方案。【参考方案2】:

在将 ViewController 的背景颜色设置为清除后,添加 Earl Grey 的响应。使用以下属性集创建一个 segue:

善意“以模态方式呈现” Presentation 到“Over Current Context”

【讨论】:

以上是关于iPhone,iOS 8:如何呈现比原始视图控制器更小的 ViewController?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 8/Swift 中构建自定义视图控制器的呈现?变量初始化被证明是困难的

iOS 8 – 在设置关键窗口或关闭并立即呈现另一个视图控制器后快速呈现视图控制器时出现故障

iOS 8 中呈现的视图控制器中的界面方向不正确

iOS 8 自定义视图控制器演示:在动画期间更改呈现的 VC 的大小

在 iOS 8 中呈现弹出框时如何使屏幕模糊

如何在 iOS 8 中强制视图控制器方向?