我使用IB来创建一个segue来呈现另一个视图popover。
我在prepareForSegue
中添加了一个代码,用于将UIPopoverPresentationControllerDelegate释放到初始控制器。
我设置了演示风格:
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController,
traitCollection: UITraitCollection) -> UIModalPresentationStyle {
return UIModalPresentationStyle.None
}
这给了我一个很好的标准弹出窗口。
但是,我想制作一个半透明的popover。
我尝试了几件事:
答案 0 :(得分:6)
要将视图控制器置于另一个具有透明度的视图上,您需要返回UIModalPresentationStyle.OverCurrentContext
。
答案 1 :(得分:1)
概念:在切换到弹出框之前调整源视图控制器的alpha值,并在解除弹出时再次调回1.0:
将源视图控制器设置为弹出代理
class MyVC: UIViewController, UIPopoverPresentationControllerDelegate {
在'准备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;
}
创建委托方法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