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
This commit is contained in:
Samuel Susla
2020-08-25 06:50:34 -07:00
committed by Facebook GitHub Bot
parent 9aabc8cdf0
commit 258387ddaa
3 changed files with 11 additions and 10 deletions
@@ -10,6 +10,7 @@
#import <React/RCTBackedTextInputViewProtocol.h>
#import <React/RCTConversions.h>
#import <React/RCTSurfaceTouchHandler.h>
#import <React/RCTUtils.h>
#import <React/UIView+React.h>
#import <react/renderer/components/inputaccessory/InputAccessoryComponentDescriptor.h>
#import <react/renderer/components/rncore/Props.h>
@@ -120,17 +121,17 @@ static UIView<RCTBackedTextInputViewProtocol> *_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];
@@ -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);
@@ -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