如何使UIPopoverPresentationController对iOS 9半透明

时间:2015-11-12 20:15:07

标签: ios swift ios9 popover

我使用IB来创建一个segue来呈现另一个视图popover。

我在prepareForSegue中添加了一个代码,用于将UIPopoverPresentationControllerDelegate释放到初始控制器。

我设置了演示风格:

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

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

但是,我想制作一个半透明的popover。

我尝试了几件事:

  • 我将IB中的背景颜色设置为“清除”
  • 我尝试在popover视图中设置alpha

3 个答案:

答案 0 :(得分:6)

要将视图控制器置于另一个具有透明度的视图上,您​​需要返回UIModalPresentationStyle.OverCurrentContext

答案 1 :(得分:1)

概念:在切换到弹出框之前调整源视图控制器的alpha值,并在解除弹出时再次调回1.0:

  1. 将源视图控制器设置为弹出代理

    class MyVC: UIViewController, UIPopoverPresentationControllerDelegate {
    
  2. 在'准​​备segue'中设置委托和来源视图alpha。功能(在去往popover的路上)

    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;
    }
    

答案 2 :(得分:0)

我无法通过发布的答案获得理想的效果。但是,这两行对我有用:

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