7

我正在尝试制作一个类似于 2014 年 WWDC 会议 214 中的弹出框。

所以我开始使用 IB 构建我的应用程序,其中两个视图通过“Present As Popover”segue 连接,如下所示:

在此处输入图像描述 弹出视图包含一个填充其父视图的文本视图,具有以下约束: 在此处输入图像描述

为了支持模态弹出框,下面的代码:

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
    return .OverFullScreen
}

func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {

    let navigationController = UINavigationController(rootViewController: controller.presentedViewController)
    controller.presentedViewController.navigationItem.setRightBarButtonItem(UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: self, action: "done"), animated: true)

    return navigationController
}

这给了我以下结果: 在此处输入图像描述

然后我尝试添加具有模糊效果的 UIVisualEffectView。起初我只是简单地向呈现的控制器视图添加一个子视图,在检查视图层次结构后,我意识到我的效果视图实际上是在我的文本视图之上,但我的文本视图放置正确。所以我尝试了这样的 insertSubview: atIndex: 方法:

func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {

    let effectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light)) as UIVisualEffectView
    effectView.setTranslatesAutoresizingMaskIntoConstraints(false)
    controller.presentedViewController.view.insertSubview(effectView, atIndex: 0)

    let viewList : [String : UIView] = ["effectView" : effectView]

    let navigationController = UINavigationController(rootViewController: controller.presentedViewController)
    controller.presentedViewController.navigationItem.setRightBarButtonItem(UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: self, action: "done"), animated: true)


    controller.presentedViewController.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[effectView]|", options: nil, metrics: nil, views: viewList))

    controller.presentedViewController.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[effectView]|", options: nil, metrics: nil, views: viewList))

    return navigationController
}

但我仍然无法呈现 IB 中定义的文本视图: 在此处输入图像描述

通过视图层次结构,我可以看到当我在索引 0 处插入 UIVisualEffectView 时,我的文本视图以某种方式移动到导航栏下方。

关于如何以编程方式在文本下方设置模糊效果而不使其在导航栏下方消失/移动的任何想法?

干杯

4

1 回答 1

0

这个功能对你有帮助吗?

view.insertSubview(view: effectView, belowSubview: label)
于 2017-08-25T16:10:03.593 回答