如何在 iOS 13 中获取滚动视图的完整快照?
Posted
技术标签:
【中文标题】如何在 iOS 13 中获取滚动视图的完整快照?【英文标题】:How to get entire snapshot of scrollview in iOS 13? 【发布时间】:2020-07-08 06:22:53 【问题描述】:注意:iOS 13
以下代码:
extension UIScrollView
var snapshot: UIImage?
UIGraphicsBeginImageContextWithOptions(contentSize, false, 0)
defer
UIGraphicsEndImageContext()
guard let context = UIGraphicsGetCurrentContext() else return nil
let previousFrame = frame
let previousOffset = contentOffset
frame = CGRect(x: 0, y: 0, width: contentSize.width, height: contentSize.height)
contentOffset = CGPoint.zero
layer.render(in: context)
frame = previousFrame
contentOffset = previousOffset
return UIGraphicsGetImageFromCurrentImageContext()
它在 ios 12 中确实可以完美运行,但是,在 iOS 13 中只截取了(可见区域)scrollView 的一部分。
我想截图总的scrollView。有什么办法解决吗?
【问题讨论】:
几个小时前您已经发布了几乎相同的主题,不是吗?你为什么要反复这样做? @ElTomato 我已经删除了那个帖子,不是很清楚。我没有找到解决这个问题的方法,所以我需要一些帮助。 我认为这是不可能的。您可能需要手动创建一个UIView
对象并自己添加更小的对象。
请检查这个***.com/questions/41920416/…
这能回答你的问题吗? How to make a screenshot of all the content of a Scrollview?
【参考方案1】:
解决问题的关键是先removeFromSuperview
:
private func snapshot() -> UIImage?
// remove first
scrollView.removeFromSuperview()
UIGraphicsBeginImageContextWithOptions(scrollView.contentSize, false, 0)
let savedContentOffset = scrollView.contentOffset
let savedFrame = scrollView.frame
scrollView.contentOffset = CGPoint.zero
scrollView.frame = CGRect(x: 0, y: 0, width: scrollView.contentSize.width, height: scrollView.contentSize.height)
scrollView.layer.render(in: UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
scrollView.contentOffset = savedContentOffset
scrollView.frame = savedFrame
UIGraphicsEndImageContext()
// add again
self.view.addSubview(scrollView)
scrollView.snp.remakeConstraints (make) in
make.left.right.equalToSuperview()
make.top.equalTo(naviHeight)
make.bottom.equalTo(-safeBottomHeight-105)
return image
有趣...
【讨论】:
以上是关于如何在 iOS 13 中获取滚动视图的完整快照?的主要内容,如果未能解决你的问题,请参考以下文章
iOS 嵌套 UIScrollViews 使用 AutoLayout
如果要求是 Textview 应该显示最多 4 行的完整文本,那么如何设置 textview 的高度,然后它应该在 swift 3 中滚动?