如何使 iOS 9 的 UIPopoverPresentationController 半透明

How to make UIPopoverPresentationController semi transparent for iOS 9

我使用 IB 创建了一个 segue 来呈现另一个视图的弹出窗口。

我在 prepareForSegue 中添加了一个代码来删除 UIPopoverPresentationControllerDelegate 到初始控制器。

然后我设置了演示风格:

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController,
     traitCollection: UITraitCollection) -> UIModalPresentationStyle {
      return UIModalPresentationStyle.None
}

这给了我一个很好的标准弹出窗口。

不过,我想做一个半透明的popover。

我尝试了几件事:

要让一个视图控制器透明地放在另一个视图控制器之上,您需要 return UIModalPresentationStyle.OverCurrentContext

概念:在转到弹出窗口之前调整源视图控制器的 alpha 值,并在它被关闭时再次回到 1.0:

  1. 将源视图控制器设置为弹出窗口委托

    class MyVC: UIViewController, UIPopoverPresentationControllerDelegate {
    
  2. 在 'prepare for segue' 函数中设置委托和源视图 alpha(在弹出窗口的路上)

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let controller = segue.destination as! ISACGlossaryTVC
        controller.popoverPresentationController!.delegate = self
        self.view.alpha = 0.2;
    }
    
  3. 创建委托方法 popoverPresentationControllerDidDismissPopover ,并在弹出窗口关闭后重置源视图 alpha

    func popoverPresentationControllerDidDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) {
        self.view.alpha = 1.0;
    }
    

我无法通过发布的答案达到预期的效果。然而,这两行对我有用:

popupVC.modalPresentationStyle = UIModalPresentationStyle.none
popupVC.popoverPresentationController?.backgroundColor = UIColor.clear // This needs to be set for the translucent appearance