From e03674381315f92292add444055aeaba791076d3 Mon Sep 17 00:00:00 2001 From: Yogev Ben David Date: Sun, 24 Feb 2019 14:40:54 +0200 Subject: [PATCH] Fixes initial screen size (#4781) --- lib/ios/RNNReactRootViewCreator.m | 13 +++++++------ lib/ios/RNNReactView.h | 2 +- lib/ios/RNNReactView.m | 3 ++- lib/ios/RNNRootViewController.m | 2 +- lib/ios/RNNRootViewCreator.h | 2 +- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/lib/ios/RNNReactRootViewCreator.m b/lib/ios/RNNReactRootViewCreator.m index a931849a5b0..a0dcf62560c 100644 --- a/lib/ios/RNNReactRootViewCreator.m +++ b/lib/ios/RNNReactRootViewCreator.m @@ -14,24 +14,25 @@ - (instancetype)initWithBridge:(RCTBridge*)bridge { return self; } -- (RNNReactView*)createRootView:(NSString*)name rootViewId:(NSString*)rootViewId reactViewReadyBlock:(RNNReactViewReadyCompletionBlock)reactViewReadyBlock { +- (RNNReactView*)createRootView:(NSString*)name rootViewId:(NSString*)rootViewId availableSize:(CGSize)availableSize reactViewReadyBlock:(RNNReactViewReadyCompletionBlock)reactViewReadyBlock { if (!rootViewId) { @throw [NSException exceptionWithName:@"MissingViewId" reason:@"Missing view id" userInfo:nil]; } RNNReactView *view = [[RNNReactView alloc] initWithBridge:_bridge - moduleName:name - initialProperties:@{@"componentId": rootViewId} - reactViewReadyBlock:reactViewReadyBlock]; + moduleName:name + initialProperties:@{@"componentId": rootViewId} + availableSize:availableSize + reactViewReadyBlock:reactViewReadyBlock]; return view; } - (UIView*)createRootViewFromComponentOptions:(RNNComponentOptions*)componentOptions { - return [self createRootView:componentOptions.name.get rootViewId:componentOptions.componentId.get reactViewReadyBlock:nil]; + return [self createRootView:componentOptions.name.get rootViewId:componentOptions.componentId.get availableSize:CGSizeZero reactViewReadyBlock:nil]; } - (UIView*)createRootViewFromComponentOptions:(RNNComponentOptions*)componentOptions reactViewReadyBlock:(RNNReactViewReadyCompletionBlock)reactViewReadyBlock { - return [self createRootView:componentOptions.name.get rootViewId:componentOptions.componentId.get reactViewReadyBlock:reactViewReadyBlock]; + return [self createRootView:componentOptions.name.get rootViewId:componentOptions.componentId.get availableSize:CGSizeZero reactViewReadyBlock:reactViewReadyBlock]; } @end diff --git a/lib/ios/RNNReactView.h b/lib/ios/RNNReactView.h index f542517df91..3dc4f00f1cf 100644 --- a/lib/ios/RNNReactView.h +++ b/lib/ios/RNNReactView.h @@ -5,7 +5,7 @@ typedef void (^RNNReactViewReadyCompletionBlock)(void); @interface RNNReactView : RCTRootView -- (instancetype)initWithBridge:(RCTBridge *)bridge moduleName:(NSString *)moduleName initialProperties:(NSDictionary *)initialProperties reactViewReadyBlock:(RNNReactViewReadyCompletionBlock)reactViewReadyBlock; +- (instancetype)initWithBridge:(RCTBridge *)bridge moduleName:(NSString *)moduleName initialProperties:(NSDictionary *)initialProperties availableSize:(CGSize)availableSize reactViewReadyBlock:(RNNReactViewReadyCompletionBlock)reactViewReadyBlock; @property (nonatomic, copy) void (^rootViewDidChangeIntrinsicSize)(CGSize intrinsicSize); @property (nonatomic, copy) RNNReactViewReadyCompletionBlock reactViewReadyBlock; diff --git a/lib/ios/RNNReactView.m b/lib/ios/RNNReactView.m index 6e6e97cc49a..5fab44bc33f 100644 --- a/lib/ios/RNNReactView.m +++ b/lib/ios/RNNReactView.m @@ -4,10 +4,11 @@ @implementation RNNReactView -- (instancetype)initWithBridge:(RCTBridge *)bridge moduleName:(NSString *)moduleName initialProperties:(NSDictionary *)initialProperties reactViewReadyBlock:(RNNReactViewReadyCompletionBlock)reactViewReadyBlock { +- (instancetype)initWithBridge:(RCTBridge *)bridge moduleName:(NSString *)moduleName initialProperties:(NSDictionary *)initialProperties availableSize:(CGSize)availableSize reactViewReadyBlock:(RNNReactViewReadyCompletionBlock)reactViewReadyBlock { self = [super initWithBridge:bridge moduleName:moduleName initialProperties:initialProperties]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(contentDidAppear:) name:RCTContentDidAppearNotification object:nil]; _reactViewReadyBlock = reactViewReadyBlock; + [bridge.uiManager setAvailableSize:availableSize forRootView:self]; return self; } diff --git a/lib/ios/RNNRootViewController.m b/lib/ios/RNNRootViewController.m index 23ff49b9e21..f5ed77c42ab 100644 --- a/lib/ios/RNNRootViewController.m +++ b/lib/ios/RNNRootViewController.m @@ -97,7 +97,7 @@ - (void)renderTreeAndWait:(BOOL)wait perform:(RNNReactViewReadyCompletionBlock)r } __block RNNReactViewReadyCompletionBlock readyBlockCopy = readyBlock; - UIView* reactView = [_creator createRootView:self.layoutInfo.name rootViewId:self.layoutInfo.componentId reactViewReadyBlock:^{ + UIView* reactView = [_creator createRootView:self.layoutInfo.name rootViewId:self.layoutInfo.componentId availableSize:[UIScreen mainScreen].bounds.size reactViewReadyBlock:^{ [_presenter renderComponents:self.resolveOptions perform:^{ if (readyBlockCopy) { readyBlockCopy(); diff --git a/lib/ios/RNNRootViewCreator.h b/lib/ios/RNNRootViewCreator.h index e6c59e5e2d7..c20d3c72c3c 100644 --- a/lib/ios/RNNRootViewCreator.h +++ b/lib/ios/RNNRootViewCreator.h @@ -5,7 +5,7 @@ @protocol RNNRootViewCreator -- (RNNReactView*)createRootView:(NSString*)name rootViewId:(NSString*)rootViewId reactViewReadyBlock:(RNNReactViewReadyCompletionBlock)reactViewReadyBlock; +- (RNNReactView*)createRootView:(NSString*)name rootViewId:(NSString*)rootViewId availableSize:(CGSize)availableSize reactViewReadyBlock:(RNNReactViewReadyCompletionBlock)reactViewReadyBlock; - (UIView*)createRootViewFromComponentOptions:(RNNComponentOptions*)componentOptions;