透明的UIPopover

6

有没有办法使UIPopOver透明(alpha = 0.75左右)。不幸的是,UIPopOver没有alpha属性。我需要呈现一个弹出窗口,以便它下面的视图仍然部分可见。有什么想法吗?

有没有办法使UIPopOver透明(alpha = 0.75左右)。不幸的是,UIPopOver没有alpha属性。我需要呈现一个弹出窗口,以便它下面的视图仍然部分可见。有什么想法吗?
5个回答

7

iOS5.0开始,可以为UIPopoverController提供自定义背景。该背景必须派生自UIPopoverBackgroundView,它提供了UIView属性,如alpha

需要注意的是,名称有点令人困惑-UIPopoverBackgroundView提供了框架、箭头以及背景图形。

因此,如果您需要一个完全半透明的UIPopoverController,您只需要提供一个UIPopoverBackgroundView类,将其alpha设置为低于1.0的值。您还需要确保contentViewController的视图是(完全)透明的。

例如:

enter image description here


详情请参见UIPopoverControllerpopoverBackgroundViewClass属性:see the popoverBackgroundViewClass property of UIPopoverController

popoverBackgroundViewClass

用于显示弹出框背景内容的类。
@property (nonatomic, readwrite, retain) Class popoverBackgroundViewClass

讨论

该属性的默认值为nil,表示弹出窗控制器应使用默认的弹出窗外观。将此属性设置为非nil值会导致弹出窗控制器使用指定的类来绘制弹出窗的背景内容。您指定的类必须是UIPopoverBackgroundView的子类。

可用性 在iOS 5.0及更高版本中可用。 声明于 UIPopoverController.h


还没有使用过,但很高兴看到UIPopover终于有更多的自定义选项了。 - Jasper
3
这个支持在 iOS 9.0 中被弃用。有人知道是否有更新的方法吗? - John Bushnell

5
popoverController.contentViewController.view.alpha = 0.5;

alpha是UIView的一个属性,因此您需要获取popOver的视图,然后将alpha设置为该视图。


2
虽然理论上应该可以工作,但实际上不会工作。 - Oscar Gomez

4

目前没有设置 UIPopoverController 透明度的属性。

如果您这样做:popoverController.contentViewController.view.alpha = 0.5;

内部视图和内容将是透明的,而不是 UIPopoverController 本身。

相关问题


4
针对iOS 13:
存在一个具有深灰色背景的不透明子视图,其类型为_UIPopoverStandardChromeView,没有API可以控制它(苹果的bug?)。要使弹出窗口透明,您可能需要将以下hack添加到呈现的视图控制器中。必须在viewDidAppear(_:)调用之后或其中执行此操作。它在viewWillAppear(_:)或更早的调用中无法正常工作。
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    // Only works in viewDidAppear()
    self.popoverPresentationController?.containerView?.subviews.last?.subviews.first?.alpha = 0
}

谢谢您。我花了好几个小时来研究这个问题,当我在视图层次结构工具中发现答案时,看到了您的回答。此外,我已经让这个问题在viewDidLayoutSubviews中得以解决! - user13138159

1
你现在可以使用popoverPresentationController的backgroundColour属性来实现这个功能,例如:
            if let popoverPresentationController = myController.popoverPresentationController {
                popoverPresentationController.backgroundColor = UIColor(white: 1, alpha: 0.5)
            }

请不要忘记将弹出窗口中的视图和控件设置为透明,并根据您想要实现的效果进行适当的调整。

有关更多详细信息,请参见此SO答案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接