【问题标题】:UIPopoverPresentationController without overlay没有覆盖的 UIPopoverPresentationController
【发布时间】:2018-01-23 10:32:37
【问题描述】:

我正在使用 UIPopoverPresentationController 实现一个弹出视图。

这样做的问题在于,默认情况下,我为控制器设置了一个半径较大的阴影。

我想禁用这个 - 覆盖。

我试过了:

  1. 自定义布局阴影(使用 UIPopoverBackgroundView):

    layer.shadowColor = UIColor.white.withAlphaComponent(0.01).cgColor
    layer.shadowOffset = .zero
    layer.shadowRadius = 0
    
  2. 在视图调试中 - 我可以在弹出的 4 个带有灰色渐变背景的图像视图后面看到:

我确信这是默认行为,即在弹出框后面显示叠加层。

如何禁用此功能?

我找到了thisthis。但这些都没有帮助。

【问题讨论】:

    标签: swift uipopoverpresentationcontroller


    【解决方案1】:

    如果您仔细查看视图层次结构,您会注意到阴影层 _UIMirrorNinePatchView 是与 UIPopoverView 相同的 UITransitionView 的子层 - 两者处于同一级别。

    views hierarchy picture

    在这种情况下,您可以尝试像这样隐藏这个子层:

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
    
        if let shadowLayer = UIApplication.shared.windows.first?.layer.sublayers?[1].sublayers?[1] {
            shadowLayer.isHidden = true
        }
    }
    

    确保将其隐藏在 viewDidLayoutSubviews 中,以避免与缺少子图层或子图层闪烁相关的异常。

    【讨论】:

    • 我不喜欢这个解决方案,因为它使用了一个 UIApplication,而且它有一个丑陋的方法来找出那个视图。我正在将此应用于我的应用程序。它确实有效,尽管我可以看到一些闪烁。目前,我对此没有其他解决方案。 @kpoznak,谢谢
    猜你喜欢
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    相关资源
    最近更新 更多