iOS - Scrollview 屏幕截图显示灰色部分

Posted

技术标签:

【中文标题】iOS - Scrollview 屏幕截图显示灰色部分【英文标题】:iOS - Scrollview screenshot is showing grey parts 【发布时间】:2017-08-31 11:32:29 【问题描述】:

我有以下代码:

func takeScrollScreenshot() -> UIImage? 

    let scrollview: UIScrollView = self as! UIScrollView
    UIGraphicsBeginImageContext(scrollview.contentSize)
    let savedContentOffset = scrollview.contentOffset
    let savedFrame = scrollview.frame
    scrollview.contentOffset = CGPoint.zero;
    scrollview.frame = CGRect(x: CGFloat(0),
                              y: CGFloat(0),
                              width: scrollview.contentSize.width,
                              height: scrollview.contentSize.height);
    scrollview.layer.render(in: UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext();
    scrollview.contentOffset = savedContentOffset
    scrollview.frame = savedFrame
    UIGraphicsEndImageContext()

    return image

层次结构是这样的:View -> ScrollView -> View --> 其余视图

scrollview截图,问题是为什么底部没有上色。

内部视图的屏幕截图。

应该是什么样子

【问题讨论】:

您的所有视图是滚动视图的子视图,还是您拥有包含所有视图的容器视图? 是这样的:View -> ScrollView -> View --> 剩余的视图 然后尝试截取 View 的屏幕截图(scrollview 的子视图)并检查 我会尝试,但奇怪的是相同的功能只是在这个屏幕上失败 是的! .你的代码没有问题。即使为我工作,这也是我告诉你使用 View 的原因 【参考方案1】:

我找到了解决方案。 我只需要添加行drawHierarchy(in: self.bounds, afterScreenUpdates: true)

func takeScrollScreenshot() -> UIImage? 

    let scrollview: UIScrollView = self as! UIScrollView
    UIGraphicsBeginImageContext(scrollview.contentSize)
    let savedContentOffset = scrollview.contentOffset
    let savedFrame = scrollview.frame
    scrollview.contentOffset = CGPoint.zero;
    scrollview.frame = CGRect(x: CGFloat(0),
                              y: CGFloat(0),
                              width: scrollview.contentSize.width,
                              height: scrollview.contentSize.height);
    scrollview.layer.render(in: UIGraphicsGetCurrentContext()!)

    //I forget add this line.
    drawHierarchy(in: self.bounds, afterScreenUpdates: true)

    let image = UIGraphicsGetImageFromCurrentImageContext();
    scrollview.contentOffset = savedContentOffset
    scrollview.frame = savedFrame
    UIGraphicsEndImageContext()

    return image

【讨论】:

删除 scrollview.layer.render 后仅 drawHierarchy(in: self.bounds, afterScreenUpdates: true) 工作? 我必须添加它。

以上是关于iOS - Scrollview 屏幕截图显示灰色部分的主要内容,如果未能解决你的问题,请参考以下文章

iOS SwiftUI:ScrollView 忽略顶部安全区域

iOS 10上的ScrollView“错误”,swift 4 [重复]

自 iOS6 以来的按钮背景和渐变变化

React Native (Android) 中的屏幕截图

textfield + scrollview 奇怪的问题 ios7

无法在 iTunes Connect 上上传 iOS 应用屏幕截图