如何消除PDFView"page shadow"?

How to eliminate PDFView "page shadow"?

当 iOS PDFView 添加到 UIView 时,PDFView 的页面区域会添加一个类似阴影的边框。有没有办法消除阴影?

我知道一些混乱的方法来做到这一点:将边界扩展到屏幕外,覆盖一个白色的 UIView 以隐藏阴影,或者修改私有 PDFPageView(到剪辑到边界)。我特别不希望屏幕外的边界在这里,并且不希望与其他 hacks 混淆。

附上示例。 (此处以 IRS 表格为例;应用程序与 IRS 无关...)

我在拆分视图窗格中遇到了类似的问题。我所做的是检查子视图中的每个视图,以及它们的每个子视图,还有层,直到确定问题视图(花了一些时间)。然后我只是将该视图隐藏或不透明。

当我测试 uiview 子类时,我没有硬核这个名称,而是使用格式字符串构造它,以免触发我的应用程序的一些自动化测试(Apple 批准)。

更新:Apple 回复我的 Radar,新 属性、PDFView.pageShadowsEnabled 已添加到 iOS 12,beta 3。现在这是隐藏阴影。万岁!

https://developer.apple.com/documentation/pdfkit/pdfview/3013838-pageshadowsenabled?changes=latest_minor

前iOS 12 以下信息:

我已与 Apple(WWDC 2018 实验室)确认,官方没有隐藏阴影的方法。我被告知有一种仅限内部的方法可以执行此操作,并要求我提交一份 Radar 以公开该方法。雷达 # 40847614 如果有人想欺骗。

与此同时,我正在深入研究视图层次结构,并将所有内容都限制在边界内。我不喜欢它,但它似乎有效。旋转时的阴影 returns,所以我在 viewWillAppear 和 viewWillTransitionToSize 中都调用了它。

-(void)removeShadowFromPDFView:(UIView *)view {
    //Deep-dive into pdfView and set all views to clipsToBounds = YES

    view.clipsToBounds = YES;

    if ([view subviews].count == 0) {
        //No subviews to examine
        return;
    }

    for (UIView *subview in view.subviews) {
        view.clipsToBounds = YES;
        [self removeShadowFromView:subview];
    }
}

在 Swift 中,您可以使用以下代码行禁用页面阴影

pdfView.pageShadowsEnabled = false

实际上您应该更改两个属性以消除任何边框外观

pdfView.pageShadowsEnabled = false (iOS 12+)
pdfView.backgroundColor = .clear

顺便说一下,因为内容本身有插图,你可以移动它而不是改变背景颜色:

extension UIView {
    func removeShadow() {
        func shift(_ view: UIView) {
            let origin = view.frame.origin
            let insets = UIEdgeInsets(
                top: -origin.y,
                left: -origin.x,
                bottom: -origin.y,
                right: -origin.x
            )
            view.frame = view.frame.inset(by: insets)
        }
        
        shift(self)
        
        self.subviews.forEach {
            shift([=11=])
            [=11=].removeShadow()
        }
    }
}