如何使 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。
我尝试了几件事:
- 我在IB中设置背景色为"clear"
- 我尝试在弹出窗口视图上设置 alpha
要让一个视图控制器透明地放在另一个视图控制器之上,您需要 return UIModalPresentationStyle.OverCurrentContext
。
概念:在转到弹出窗口之前调整源视图控制器的 alpha 值,并在它被关闭时再次回到 1.0:
将源视图控制器设置为弹出窗口委托
class MyVC: UIViewController, UIPopoverPresentationControllerDelegate {
在 '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;
}
创建委托方法 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
我使用 IB 创建了一个 segue 来呈现另一个视图的弹出窗口。
我在 prepareForSegue
中添加了一个代码来删除 UIPopoverPresentationControllerDelegate 到初始控制器。
然后我设置了演示风格:
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController,
traitCollection: UITraitCollection) -> UIModalPresentationStyle {
return UIModalPresentationStyle.None
}
这给了我一个很好的标准弹出窗口。
不过,我想做一个半透明的popover。
我尝试了几件事:
- 我在IB中设置背景色为"clear"
- 我尝试在弹出窗口视图上设置 alpha
要让一个视图控制器透明地放在另一个视图控制器之上,您需要 return UIModalPresentationStyle.OverCurrentContext
。
概念:在转到弹出窗口之前调整源视图控制器的 alpha 值,并在它被关闭时再次回到 1.0:
将源视图控制器设置为弹出窗口委托
class MyVC: UIViewController, UIPopoverPresentationControllerDelegate {
在 '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; }
创建委托方法 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