如何将 UIViewController 呈现为部分视图?

     2023-02-23     303

关键词:

【中文标题】如何将 UIViewController 呈现为部分视图?【英文标题】:How to present UIViewController as partial view? 【发布时间】:2017-03-02 22:46:05 【问题描述】:

例如,音乐应用的“正在播放”屏幕和邮件应用的电子邮件撰写屏幕如下所示:

我该如何表达我的观点?我假设仅使用故事板无法实现它,因为所有选项似乎都覆盖了全屏而不是所需的部分模式。

【问题讨论】:

您可以尝试将背景颜色更改为清除(这样您将能够看到下面的viewController)并添加另一个视图(小于主视图)并将其颜色设置为白色。 :) 只是我的想法 【参考方案1】:

这不是最近的问题,所以我把它留作将来使用。希望你已经成功了。

首先,您只需照原样关注this UIPresentationController guide。

然后将呈现的视图控制器框架调整为大于屏幕的2/3。

override func containerViewWillLayoutSubviews() 
    presentedView?.frame = frameOfPresentedViewInContainerView
    presentedView?.layer.cornerRadius = 5.0
    presentedView?.layer.masksToBounds = true


override func size(forChildContentContainer container: UIContentContainer,
                   withParentContainerSize parentSize: CGSize) -> CGSize 
    switch direction 
        case .left, .right:
            return CGSize(width: parentSize.width*(2.0/3.0), height: parentSize.height)
        case .bottom, .top:
            return CGSize(width: parentSize.width, height: parentSize.height-40.0)
    


override var frameOfPresentedViewInContainerView: CGRect 
    var frame: CGRect = .zero
    frame.size = size(forChildContentContainer: presentedViewController,
                withParentContainerSize: containerView!.bounds.size)

    switch direction 
        case .right:
            frame.origin.x = containerView!.frame.width*(1.0/3.0)
        case .bottom:
            frame.origin.y = 40.0
        default:
            frame.origin = .zero
    
    return frame

然后在调光动画期间设置呈现视图控制器框架。

    self.presentingFrame = self.presentingViewController.view.frame
    var frame = self.presentingFrame
    frame.size.width -= 40.0
    frame.size.height -= 60.0
    frame.origin.x += 20.0
    frame.origin.y += 30.0

    coordinator.animate(alongsideTransition:  _ in
        self.dimmingView.alpha = 1.0

        self.presentingViewController.view.frame = frame

        self.presentingViewController.view.layer.cornerRadius = 5.0
        self.presentingViewController.view.layer.masksToBounds = true

        UIApplication.shared.statusBarStyle = .lightContent
    )

不要忘记添加反向动画。结果:

【讨论】:

【参考方案2】:

我假设仅靠情节提要无法实现...

是的,不可能。 评估实现 Custom View Controller Transition Animation 以获得正确的转换,因此它应该只是对呈现的视图控制器的子视图进行 frame & alpha 操作。

【讨论】:

如何将 UI 元素保留在 UIViewController 及其呈现的 ViewController 之上?

】如何将UI元素保留在UIViewController及其呈现的ViewController之上?【英文标题】:HowdoIkeepUIelementsaboveaUIViewControlleranditspresentedViewController?【发布时间】:2017-10-2315:25:29【问题描述】:我想在我的应用的第一个VC之上以及它呈现的第... 查看详情

如何使用完成按钮呈现包含 iOS App Store 的 UIViewController

】如何使用完成按钮呈现包含iOSAppStore的UIViewController【英文标题】:HowtopresentaUIViewControllercontainingiOSAppStore,withDonebutton【发布时间】:2018-02-1516:54:40【问题描述】:AccordingtoApple,要从App内启动到iOSAppStore,您必须将AppStore链接(http... 查看详情

如何在 SKScene 中呈现 UIViewController?

】如何在SKScene中呈现UIViewController?【英文标题】:HowtopresentaUIViewControllerinaSKScene?【发布时间】:2015-07-0215:18:02【问题描述】:我一直在试图弄清楚如何在SKScene中呈现UIViewController。更具体地说,我正在处理GameScene.swift,当按下... 查看详情

将uiviewcontroller呈现为uimodalpresentationformsheet和uimodalpresentationovercurrentcontext(代码片段)

如何在当前上下文中呈现具有模糊背景的UITableViewController作为表单?-(void)viewDidLoadself.tableView.backgroundColor=[UIColorclearColor];self.tableView.backgroundView=[[UIVisualEffectViewalloc]initWithEffect:[UIBlurEffecteffectWithStyle:UIBlurEffectStyleLight]];在使用UIModal... 查看详情

如何从内容 ViewController 呈现 UIViewController?

】如何从内容ViewController呈现UIViewController?【英文标题】:HowtopresentUIViewControllerfromcontentViewController?【发布时间】:2014-02-0109:12:53【问题描述】:我得到了menuVC,其中包含其他VC的组合,其中之一是loginViewController,如何从menuVC转... 查看详情

如何从 viewController 的视图中呈现 UIViewController

】如何从viewController的视图中呈现UIViewController【英文标题】:HowtopresentUIViewControllerfromviewController\'sview【发布时间】:2017-11-1022:49:49【问题描述】:我在UIViewController中使用UITableViewController的视图,如下所示:UITableViewController*tvc=[... 查看详情

如何使用社交框架呈现来自 SKscene 的 UIViewController?

】如何使用社交框架呈现来自SKscene的UIViewController?【英文标题】:HowdoIpresentUIViewControllerfromSKscenewithsocialframework?【发布时间】:2014-03-1508:03:41【问题描述】:我正在制作像FlappyBird这样的游戏。如何呈现来自SKScene的UIViewController... 查看详情

如何访问呈现模态视图的 UIViewController 类/类名?

】如何访问呈现模态视图的UIViewController类/类名?【英文标题】:HowtoAccesstheUIViewControllerclass/classNamethatpresentsaModalView?【发布时间】:2013-01-0500:15:54【问题描述】:一个简单的问题目前我呈现这样的模态视图:+(void)showModalController... 查看详情

如何在将 UIViewController 呈现给自定义时更改默认转换

】如何在将UIViewController呈现给自定义时更改默认转换【英文标题】:HowtochangethedefaulttransitionwhilepresentingUIViewControllertocustom【发布时间】:2015-03-2509:25:04【问题描述】:我正在尝试从我当前的视图控制器中呈现另一个UIViewController... 查看详情

如何在 macOS 的 Swift Playgrounds 中呈现 UIViewController?

】如何在macOS的SwiftPlaygrounds中呈现UIViewController?【英文标题】:HowtopresentanUIViewControllerinSwiftPlaygroundsformacOS?【发布时间】:2020-02-1210:26:01【问题描述】:我在我的macOS设备上从AppStore下载了SwiftPlaygroundsv3.2。我想在一个空项目中... 查看详情

在非 UIViewController 类中呈现 UIAlertController 时如何隐藏状态栏?

】在非UIViewController类中呈现UIAlertController时如何隐藏状态栏?【英文标题】:HowtohidethestatusbarwhenpresentingaUIAlertControllerinanon-UIViewControllerclass?【发布时间】:2017-12-2105:57:49【问题描述】:当用户点击非UIViewController类中的按钮时,... 查看详情

如何像这样在 IOS 中从底部呈现模态 UIViewController 对话框(附图)

】如何像这样在IOS中从底部呈现模态UIViewController对话框(附图)【英文标题】:howtopresentmodalUIViewControllerdialogfrombottominIOSlikethis(imageattached)【发布时间】:2017-01-2400:28:38【问题描述】:如何呈现模态的UIViewController(从Storyboard说... 查看详情

推送后视图上的按钮将不起作用,然后呈现一个 UIViewController

】推送后视图上的按钮将不起作用,然后呈现一个UIViewController【英文标题】:TheButtonontheViewwillnotworkafterpushandthenpresentanUIViewController【发布时间】:2014-10-0103:40:57【问题描述】:我在导航栏上制作了一个带有按钮的视图控制器。... 查看详情

从 UIHostingViewController 呈现 UIViewController

】从UIHostingViewController呈现UIViewController【英文标题】:PresentaUIViewControllerfromaUIHostingViewController【发布时间】:2021-06-1721:54:48【问题描述】:我开始将我的应用程序从Swift重建为SwiftUI。我有一个UIViewController,它是使用UIPresentationCo... 查看详情

无背景呈现的 UIViewController

】无背景呈现的UIViewController【英文标题】:UIViewControllerpresentedwithoutbackground【发布时间】:2021-12-2517:01:21【问题描述】:当我现在新的VC背景清晰,我可以看到以前的VC。第二个VC是空的(没有任何视图)如何修复?letvc=AddScrollVC... 查看详情

如何以编程方式从 iOS Swift 3 中的 XIB 推送和呈现给 UIViewController

】如何以编程方式从iOSSwift3中的XIB推送和呈现给UIViewController【英文标题】:HowtopushandpresenttoUIViewControllerprogrammaticallyFromaXIBiniOSSwift3【发布时间】:2017-05-1208:54:59【问题描述】:我正在swift3.0中开发一个项目,我使用以下机制从一... 查看详情

如何在不隐藏 TabBar 的情况下呈现具有自下而上动画的 UIViewController

】如何在不隐藏TabBar的情况下呈现具有自下而上动画的UIViewController【英文标题】:HowtopresentaUIViewControllerwithanbottom-upanimationwithouthidingTabBar【发布时间】:2011-12-1615:08:19【问题描述】:所以,我有一个UITabbarController,里面有一个UI... 查看详情

如何在 iPhone 上以编程方式在 Swift 中将 UIViewController 呈现为弹出框

】如何在iPhone上以编程方式在Swift中将UIViewController呈现为弹出框【英文标题】:HowtopresentaUIViewControllerasapopoverinSwiftprogrammaticallyoniPhone【发布时间】:2016-04-0506:33:44【问题描述】:通常我遵循此处的说明:https://***.com/a/24687152/37419... 查看详情