美文网首页IOSiOS DeveloperiOS 开发
TableView全表截图以及分段分享

TableView全表截图以及分段分享

作者: eversterd | 来源:发表于2016-07-08 18:33 被阅读791次

TableView 全表截图

APP中有一个类似于分析报告的页面,需要全部分享,包括超出屏幕之外的cell。直接截屏只能获得tableView的一部分。在网上找了几段代码,经过测试,下面的方法可以获取整个tableView的画面(这个tableview大约是屏幕长度的两倍,动态加载的tableview没有测试)。

-(UIImage *)getTableViewimage{
    UIImage* viewImage = nil;
    UITableView *scrollView = self.tableView;
    UIGraphicsBeginImageContextWithOptions(scrollView.contentSize, scrollView.opaque, 0.0);
    {
        CGPoint savedContentOffset = scrollView.contentOffset;
        CGRect savedFrame = scrollView.frame;
        
        scrollView.contentOffset = CGPointZero;
        scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
        
        [scrollView.layer renderInContext: UIGraphicsGetCurrentContext()];
        viewImage = UIGraphicsGetImageFromCurrentImageContext();
        
        scrollView.contentOffset = savedContentOffset;
        scrollView.frame = savedFrame;
    }
    UIGraphicsEndImageContext();
    
    return viewImage;
}

TableView分段分享

产品提出tableView应该可以选择不同的section进行分享,逻辑上不复杂,隐藏不分享的section再截图即可。

@property (nonatomic) BOOL isSectionHidden0;

    -(void)setSubview{
        UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"分享" style:UIBarButtonItemStyleBordered target:self action:@selector(shareReport:)];
        [rightButton setTintColor:[UIColor whiteColor]];

        self.navigationItem.rightBarButtonItem = rightButton;
    }

    -(void)shareReport:(id)sender{
        
        [self.tableView setEditing:self.tableView.editing animated:YES];//tableView右滑出现选择按钮
        [self.tableView setEditing:!self.tableView.editing animated:YES];
        
        for (int i = 0; i < 4; i ++) {
            
            NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:i];
            
            [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];//默认选择全部分享
           
        }
        
        
        if (self.tableView.editing)
            
            [self.navigationItem.rightBarButtonItem setTitle:@"确定"];//第一次点击后 ,按钮文字变为“确定”
        
        else
        {
            [self.tableView reloadData];//隐藏不分享的section
            [self reportAfterSelect];//通过友盟分享
            [self.navigationItem.rightBarButtonItem setTitle:@"分享"];//再次点击 ,通过友盟分享,按钮恢复为“确定”
        }
        
        
    }

    #pragma delegate of tableView

    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
        if (section==0) {
            if (_isSectionHidden0) {
                return 0;
            }
            return 40;
        }
    }

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
        if (indexPath.section==0) {
            if (_isSectionHidden0) {
                return 0;
            }
            return 80;
        }
        
    }

    -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

    {
        return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
        
    }

    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
        
        if (indexPath.section==0) {
            if (_isSectionHidden0==NO) {
                _isSectionHidden0=YES;//每次选择cell,切换状态
            }else{
                _isSectionHidden0=NO;
            }
        }
    }

    //取消一项

    - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        //  NSUInteger row = [indexPath row]
        if (indexPath.section==0) {
            if (_isSectionHidden0==NO) {
                _isSectionHidden0=YES;//每次选择cell,切换状态
            }else{
                _isSectionHidden0=NO;
            }
        }
    }

最后截图分享后发现第一个section的headerView位置与cell重叠,后来各种尝试,发现加上下面这句代码就能避免。

self.automaticallyAdjustsScrollViewInsets = NO;

后知后觉的认识到可能是截图时navigationBar隐藏后,cell进行了自适应而headerView没有。

相关文章

  • TableView全表截图以及分段分享

    TableView 全表截图 APP中有一个类似于分析报告的页面,需要全部分享,包括超出屏幕之外的cell。直接截...

  • tableview 截图

    tableview 截图 //将tableview 生成图片 + (UIImage*)getTableViewim...

  • tableview 截图

  • OC(十九):获取截图通知以及分享截图

    今天无聊在京东上 逛,想买个机械键盘,看来看去不知道哪个好,就截图微信发给同学请教一下款式如何,索性准备截图微信发...

  • 分段打表

    适用题目特征 当打表范围过大,但表之间可以递推。 原理 借助分块的思想,答案来自若干子表的组合。即,整块的答案用预...

  • tableView 屏幕截图并使用AirPrint打印

    项目中要求tableView的截图,转为Data,并用AirPrint 打印出来,特地总结一下 tableView...

  • iOS 微信分享长图

    1.简介 项目中有微信分享的相关内容,要求分享长截图到微信,要求截取 tableView 的全部内容并且底部加上二...

  • iOS 截图

    1、屏幕截图 2、scrollView、tableView的截图 类似于上面的截图,会有一定的问题,如果你用sel...

  • navigationBar导致collectionViewCe

    在导航视图内Push进来的以“TableView/collectionView”(没有ScrollView截图,就...

  • 带表头表尾的TableView的实现

    1. TableView结构 表头 单元格 表尾 备注:TableView最多包含3部分(一般不需要表头和表尾),...

网友评论

  • LoveY34:博主!你好!列表数据比较多的时候这种方式截出来的图好像有问题,数据比较多的时候,contentSize不准确,博主有啥解决办法吗?
  • LD_左岸:发现TableView有20个cell只是截取了前12个cell后面的没截取出来

    如果我截取前 先上下拖动一个tableView就可以
    LD_左岸:- (UIImage *)screenShot {
    UIImage* image = nil;
    UIGraphicsBeginImageContextWithOptions(self.tableView.contentSize, YES, 0.0);
    //保存collectionView当前的偏移量
    CGPoint savedContentOffset = self.tableView.contentOffset;
    CGRect saveFrame = self.tableView.frame;
    //将collectionView的偏移量设置为(0,0)
    self.tableView.contentOffset = CGPointZero;
    self.tableView.frame = CGRectMake(0, 0, self.tableView.contentSize.width, self.tableView.contentSize.height);
    LDLog(@"%@----",NSStringFromCGRect(self.tableView.frame));
    //在当前上下文中渲染出collectionView
    [self.tableView.layer renderInContext: UIGraphicsGetCurrentContext()];
    //截取当前上下文生成Image
    image = UIGraphicsGetImageFromCurrentImageContext();

    //恢复collectionView的偏移量
    self.tableView.contentOffset = savedContentOffset;
    self.tableView.frame = saveFrame;
    UIGraphicsEndImageContext();

    if (image != nil) {
    return image;
    }else {
    return nil;
    }
    }
  • SpringAlways:截超过手机屏幕的scrollview,第一次会产生屏幕外区域是黑色区块,后面就都正常了。不知楼主有没有碰到这个问题,以及如何解决
    啊哈呵:@十位数
    scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
    scrollView.contentOffset = CGPointZero;
    先设置frame,后设置contentOffset

    天才小L:确实有问题

本文标题:TableView全表截图以及分段分享

本文链接:https://www.haomeiwen.com/subject/aacrjttx.html