-
Notifications
You must be signed in to change notification settings - Fork 24.9k
Closed
Labels
API: KeyboardComponent: KeyboardAvoidingViewNeeds: Triage 🔍StaleThere has been a lack of activity on this issue and it may be closed soon.There has been a lack of activity on this issue and it may be closed soon.
Description
Description
You are comparing height using different coordinate systems.
The keyboard frame is in window system, and the view's frame is in parent view's coordinate system.
We have to convert the frame to the same coordinate system then do compare.
Here is how I fix it:
_onLayout = (event: any) => {
const measureCallback = (x: number, y: number, width: number, height: number) => {
const wasFrameNull = this._frame == null;
this._frame = { x, y, width, height };
if (!this._initialFrameHeight) {
// save the initial frame height, before the keyboard is visible
this._initialFrameHeight = this._frame.height;
}
if (wasFrameNull) {
this._updateBottomIfNecesarry();
}
};
this.viewRef.current.measureInWindow(measureCallback);
};The buggy version:
_onLayout = (event: ViewLayoutEvent) => {
const wasFrameNull = this._frame == null;
this._frame = event.nativeEvent.layout;
if (!this._initialFrameHeight) {
// save the initial frame height, before the keyboard is visible
this._initialFrameHeight = this._frame.height;
}
if (wasFrameNull) {
this._updateBottomIfNecesarry();
}
};Version
0.66
Output of npx react-native info
don't needed
Steps to reproduce
don't needed
Snack, code example, screenshot, or link to a repository
No response
Metadata
Metadata
Assignees
Labels
API: KeyboardComponent: KeyboardAvoidingViewNeeds: Triage 🔍StaleThere has been a lack of activity on this issue and it may be closed soon.There has been a lack of activity on this issue and it may be closed soon.