tableview 截图

tableview 截图

//将tableview 生成图片

+ (UIImage*)getTableViewimage:(UITableView*)tableView

{

    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]){

        UIGraphicsBeginImageContextWithOptions(tableView.contentSize, NO, [UIScreen mainScreen].scale);


    }else{

        UIGraphicsBeginImageContext(tableView.contentSize);

    }

    //先保存原来frame 和 偏移量

    CGPointsavedContentOffset = tableView.contentOffset;

    CGRectsavedFrame =tableView.frame;


    CGSizecontentSize = tableView.contentSize;


    CGRectoldBounds = tableView.bounds;


    if(@available(iOS13, *)){

        //iOS 13 系统截屏需要改变tableview 的bounds

        [tableView.layersetBounds:CGRectMake(oldBounds.origin.x, oldBounds.origin.y, contentSize.width, contentSize.height)];

    }


    //偏移量归零

    tableView.contentOffset = CGPointZero;

    //frame变为contentSize

    tableView.frame = CGRectMake(0, 0,tableView.contentSize.width, tableView.contentSize.height);


    //截图

    [tableView.layer renderInContext:UIGraphicsGetCurrentContext()];

    if(@available(iOS13,*)){

        [tableView.layersetBounds:oldBounds];

    }

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    //还原frame 和 偏移量

    tableView.contentOffset= savedContentOffset;

    tableView.frame= savedFrame;


    returnimage;


}

方法没问题,但是一直出现超出屏幕部分截图失败问题,百度很多,都么解决

结果发现是调了viewDidLayoutSubviews方法,害

你可能感兴趣的:(tableview 截图)