如何消除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。现在这是隐藏阴影。万岁!
前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()
}
}
}
当 iOS PDFView 添加到 UIView 时,PDFView 的页面区域会添加一个类似阴影的边框。有没有办法消除阴影?
我知道一些混乱的方法来做到这一点:将边界扩展到屏幕外,覆盖一个白色的 UIView 以隐藏阴影,或者修改私有 PDFPageView(到剪辑到边界)。我特别不希望屏幕外的边界在这里,并且不希望与其他 hacks 混淆。
附上示例。 (此处以 IRS 表格为例;应用程序与 IRS 无关...)
我在拆分视图窗格中遇到了类似的问题。我所做的是检查子视图中的每个视图,以及它们的每个子视图,还有层,直到确定问题视图(花了一些时间)。然后我只是将该视图隐藏或不透明。
当我测试 uiview 子类时,我没有硬核这个名称,而是使用格式字符串构造它,以免触发我的应用程序的一些自动化测试(Apple 批准)。
更新:Apple 回复我的 Radar,新 属性、PDFView.pageShadowsEnabled 已添加到 iOS 12,beta 3。现在这是隐藏阴影。万岁!
前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()
}
}
}