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没有。