捕获包括屏幕外部分的UITableView / ScrollView的屏幕快照不再适用于iOS 13

问题描述 投票:0回答:1

由于gleb vodovozov's idea,我可以捕获包括屏幕外部分在内的整个TableView的图像,但是在使用tempView渲染图像后,超级视图不会将TableView还原为“更改前”位置。

我已经仔细检查了他的代码,没有发现任何问题。也许只是因为iOS 13的“更改”,所以与以前的iOS版本兼容的代码现在出现了故障?

下面是他的代码

非常感谢您的帮助!

var image = UIImage()
    UIGraphicsBeginImageContextWithOptions(self.myTable.contentSize, false, UIScreen.main.scale)

    // save initial values
    let savedContentOffset = self.myTable.contentOffset
    let savedFrame = self.myTable.frame
    let savedBackgroundColor = self.myTable.backgroundColor

    // reset offset to top left point
    self.myTable.contentOffset = CGPoint(x: 0, y: 0)
    // set frame to content size
    self.myTable.frame = CGRect(x: 0, y: 0, width: self.myTable.contentSize.width, height: self.myTable.contentSize.height)
    // remove background
    self.myTable.backgroundColor = UIColor.clear

    // make temp view with scroll view content size
    // a workaround for issue when image on ipad was drawn incorrectly
    let tempView = UIView(frame: CGRect(x: 0, y: 0, width: self.myTable.contentSize.width, height: self.myTable.contentSize.height))

    // save superview
    let tempSuperView = self.myTable.superview
    // remove scrollView from old superview
    self.myTable.removeFromSuperview()
    // and add to tempView
    tempView.addSubview(self.myTable)

    // render view
    // drawViewHierarchyInRect not working correctly
    tempView.layer.render(in: UIGraphicsGetCurrentContext()!)
    // and get image
    image = UIGraphicsGetImageFromCurrentImageContext()!

    // and return everything back
    tempView.subviews[0].removeFromSuperview()
    tempSuperView?.addSubview(self.myTable)

    // restore saved settings
    self.myTable.contentOffset = savedContentOffset
    self.myTable.frame = savedFrame
    self.myTable.backgroundColor = savedBackgroundColor

    UIGraphicsEndImageContext()

    return image
ios swift uitableview uiscrollview ios13
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.