From 258387ddaa4d3f38f0bd71b67be8ba70d00daf33 Mon Sep 17 00:00:00 2001 From: Samuel Susla Date: Tue, 25 Aug 2020 06:48:11 -0700 Subject: [PATCH] Use window size instead of screen size in InputAccessoryView Summary: Changelog: [internal] Use window size instead of screen size to layout InputAccessoryView. Reviewed By: PeteTheHeat Differential Revision: D23297141 fbshipit-source-id: d6d7223342d17a2e1b9e5fca6f999b7ad365d056 --- .../RCTInputAccessoryComponentView.mm | 15 ++++++++------- .../InputAccessoryComponentDescriptor.h | 2 +- .../inputaccessory/InputAccessoryState.h | 4 ++-- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/React/Fabric/Mounting/ComponentViews/InputAccessory/RCTInputAccessoryComponentView.mm b/React/Fabric/Mounting/ComponentViews/InputAccessory/RCTInputAccessoryComponentView.mm index a403b45bd9d..d151d1c0c3a 100644 --- a/React/Fabric/Mounting/ComponentViews/InputAccessory/RCTInputAccessoryComponentView.mm +++ b/React/Fabric/Mounting/ComponentViews/InputAccessory/RCTInputAccessoryComponentView.mm @@ -10,6 +10,7 @@ #import #import #import +#import #import #import #import @@ -120,17 +121,17 @@ static UIView *_Nullable RCTFindTextInputWithNat - (void)updateState:(State::Shared const &)state oldState:(State::Shared const &)oldState { _stateTeller.setConcreteState(state); - CGSize oldScreenSize = RCTCGSizeFromSize(_stateTeller.getData().value().screenSize); - CGSize screenSize = [[UIScreen mainScreen] bounds].size; - screenSize.height = std::nan(""); - if (oldScreenSize.width != screenSize.width) { - auto stateData = InputAccessoryState{RCTSizeFromCGSize(screenSize)}; + CGSize oldViewportSize = RCTCGSizeFromSize(_stateTeller.getData().value().viewportSize); + CGSize viewportSize = RCTViewportSize(); + viewportSize.height = std::nan(""); + if (oldViewportSize.width != viewportSize.width) { + auto stateData = InputAccessoryState{RCTSizeFromCGSize(viewportSize)}; _stateTeller.updateState(std::move(stateData)); } } -- (void)updateLayoutMetrics:(const facebook::react::LayoutMetrics &)layoutMetrics - oldLayoutMetrics:(const facebook::react::LayoutMetrics &)oldLayoutMetrics +- (void)updateLayoutMetrics:(LayoutMetrics const &)layoutMetrics + oldLayoutMetrics:(LayoutMetrics const &)oldLayoutMetrics { [super updateLayoutMetrics:layoutMetrics oldLayoutMetrics:oldLayoutMetrics]; diff --git a/ReactCommon/react/renderer/components/inputaccessory/InputAccessoryComponentDescriptor.h b/ReactCommon/react/renderer/components/inputaccessory/InputAccessoryComponentDescriptor.h index e92cf6e5bf9..99898b2395b 100644 --- a/ReactCommon/react/renderer/components/inputaccessory/InputAccessoryComponentDescriptor.h +++ b/ReactCommon/react/renderer/components/inputaccessory/InputAccessoryComponentDescriptor.h @@ -37,7 +37,7 @@ class InputAccessoryComponentDescriptor final auto stateData = state->getData(); layoutableShadowNode->setSize( - Size{stateData.screenSize.width, stateData.screenSize.height}); + Size{stateData.viewportSize.width, stateData.viewportSize.height}); layoutableShadowNode->setPositionType(YGPositionTypeAbsolute); ConcreteComponentDescriptor::adopt(shadowNode); diff --git a/ReactCommon/react/renderer/components/inputaccessory/InputAccessoryState.h b/ReactCommon/react/renderer/components/inputaccessory/InputAccessoryState.h index 928bff3128e..24fe19b4e5d 100644 --- a/ReactCommon/react/renderer/components/inputaccessory/InputAccessoryState.h +++ b/ReactCommon/react/renderer/components/inputaccessory/InputAccessoryState.h @@ -20,9 +20,9 @@ namespace react { class InputAccessoryState final { public: InputAccessoryState(){}; - InputAccessoryState(Size screenSize_) : screenSize(screenSize_){}; + InputAccessoryState(Size viewportSize_) : viewportSize(viewportSize_){}; - const Size screenSize{}; + const Size viewportSize{}; }; } // namespace react