Swift 3:如何去除 UITableView 截图的灰色区域 [英] Swift 3: How to remove the grey areas of the screenshot of UITableView

查看:90
本文介绍了Swift 3:如何去除 UITableView 截图的灰色区域的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在从 tableview 的屏幕截图中删除灰色区域时遇到了问题.

这是我尝试截取 UITableView 时的输出(我实际上隐藏了一些不需要的 tableViewCell,可能这就是区域显示灰色的原因)

感谢任何帮助!

非常感谢!:)

回答

我通过使用@kishan 和@Sneak 的回答找到了解决方案.当我以编程方式截取我的 UITableView 时,我只是在代码中将视图和 tableview 的 backgroundColor 更改为白色.

func screenshot() ->用户界面{var image = UIImage();UIGraphicsBeginImageContextWithOptions(self.tableView.contentSize, false, UIScreen.main.scale)//保存初始值让savedContentOffset = self.tableView.contentOffset;让savedFrame = self.tableView.frame;让savedBackgroundColor = self.tableView.backgroundColor//重置偏移量到左上角self.tableView.contentOffset = CGPoint(x: 0, y: 0);//将框架设置为内容大小self.tableView.frame = CGRect(x: 0, y: 0, width: self.tableView.contentSize.width, height: self.tableView.contentSize.height);//设置背景为白色//-->//self.tableView.backgroundColor = UIColor.white//使用滚动视图内容大小制作临时视图//当 ipad 上的图像绘制不正确时的解决方法让 tempView = UIView(frame: CGRect(x: 0, y: 0, width: self.tableView.contentSize.width, height: self.tableView.contentSize.height));//-->//tempView.backgroundColor = UIColor.white//保存超级视图让 tempSuperView = self.tableView.superview//从旧的超级视图中删除滚动视图self.tableView.removeFromSuperview()//并添加到 tempViewtempView.addSubview(self.tableView)//渲染视图//drawViewHierarchyInRect 不能正常工作tempView.layer.render(in: UIGraphicsGetCurrentContext()!)//并获取图像image = UIGraphicsGetImageFromCurrentImageContext()!;//并返回所有内容tempView.subviews[0].removeFromSuperview()tempSuperView?.addSubview(self.tableView)//恢复保存的设置self.tableView.contentOffset = savedContentOffset;self.tableView.frame = savedFrame;self.tableView.backgroundColor = savedBackgroundColorUIGraphicsEndImageContext();返回图像}

解决方案

试试这个希望它的工作 :)

tableView.backgroundColor = [UIColor clearColor];tableView.opaque = NO;tableView.backgroundView = nil;

I've facing problems in removing the grey areas from the screenshot of the tableview.

This is the output when I tried to screenshot a UITableView (I actually hide some of the tableViewCell that's not needed, probably that's why area appears grey colour)

Any help is appreciated!

Thank you very much! :)

Answer

I found the solution by using @kishan and @Sneak's answer. As I've screenshot my UITableView programmatically, I just changed the view's and tableview's backgroundColor to white in the codes.

func screenshot() -> UIImage{
    var image = UIImage();
    UIGraphicsBeginImageContextWithOptions(self.tableView.contentSize, false, UIScreen.main.scale)

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

    // reset offset to top left point
    self.tableView.contentOffset = CGPoint(x: 0, y: 0);
    // set frame to content size
    self.tableView.frame = CGRect(x: 0, y: 0, width: self.tableView.contentSize.width, height: self.tableView.contentSize.height);
    // set background to white
   //-->// self.tableView.backgroundColor = UIColor.white

    // 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.tableView.contentSize.width, height: self.tableView.contentSize.height));

    //-->//tempView.backgroundColor = UIColor.white

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

    // 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.tableView)

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

    UIGraphicsEndImageContext();

    return image
}

解决方案

try this hope its work :)

tableView.backgroundColor = [UIColor clearColor];
tableView.opaque = NO;
tableView.backgroundView = nil;

这篇关于Swift 3:如何去除 UITableView 截图的灰色区域的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆