Skip to content

Commit 86a09a8

Browse files
committed
Fixes #47
1 parent 0066b82 commit 86a09a8

File tree

1 file changed

+29
-5
lines changed

1 file changed

+29
-5
lines changed

ios/RNViewShot.m

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#import <React/UIView+React.h>
66
#import <React/RCTUtils.h>
77
#import <React/RCTConvert.h>
8+
#import <React/RCTScrollView.h>
89
#import <React/RCTUIManager.h>
910
#import <React/RCTBridge.h>
1011

@@ -54,13 +55,36 @@ - (NSDictionary *)constantsToExport
5455
CGSize size = [RCTConvert CGSize:options];
5556
NSString *format = [RCTConvert NSString:options[@"format"] ?: @"png"];
5657
NSString *result = [RCTConvert NSString:options[@"result"] ?: @"file"];
57-
58+
BOOL snapshotContentContainer = [RCTConvert BOOL:options[@"snapshotContentContainer"] ?: @"false"];
59+
5860
// Capture image
59-
if (size.width < 0.1 || size.height < 0.1) {
60-
size = view.bounds.size;
61+
BOOL success;
62+
if (snapshotContentContainer) {
63+
if (![view isKindOfClass:[RCTScrollView class]]) {
64+
reject(RCTErrorUnspecified, [NSString stringWithFormat:@"snapshotContentContainer can only be used on a RCTScrollView. instead got: %@", view], nil);
65+
return;
66+
}
67+
RCTScrollView* rctScrollView = view;
68+
UIScrollView* scrollView = rctScrollView.scrollView;
69+
CGPoint savedContentOffset = scrollView.contentOffset;
70+
CGRect savedFrame = scrollView.frame;
71+
scrollView.contentOffset = CGPointZero;
72+
scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
73+
if (size.width < 0.1 || size.height < 0.1) {
74+
size = scrollView.contentSize;
75+
}
76+
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
77+
success = [scrollView drawViewHierarchyInRect:(CGRect){CGPointZero, size} afterScreenUpdates:YES];
78+
scrollView.contentOffset = savedContentOffset;
79+
scrollView.frame = savedFrame;
80+
}
81+
else {
82+
if (size.width < 0.1 || size.height < 0.1) {
83+
size = view.bounds.size;
84+
}
85+
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
86+
success = [view drawViewHierarchyInRect:(CGRect){CGPointZero, size} afterScreenUpdates:YES];
6187
}
62-
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
63-
BOOL success = [view drawViewHierarchyInRect:(CGRect){CGPointZero, size} afterScreenUpdates:YES];
6488
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
6589
UIGraphicsEndImageContext();
6690

0 commit comments

Comments
 (0)