Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

improve docs for KeyboardAvoidingView #16479

Closed
wants to merge 2 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 18 additions & 14 deletions Libraries/Components/Keyboard/KeyboardAvoidingView.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,15 +43,19 @@ type KeyboardChangeEvent = {
const viewRef = 'VIEW';

/**
* It is a component to solve the common problem of views that need to move out of the way of the virtual keyboard.
* It can automatically adjust either its position or bottom padding based on the position of the keyboard.
* This is a component to solve the common problem of views that need to move out of the way of the virtual keyboard.
* It can automatically adjust either its height, position or bottom padding based on the position of the keyboard.
*/
const KeyboardAvoidingView = createReactClass({
displayName: 'KeyboardAvoidingView',
mixins: [TimerMixin],

propTypes: {
...ViewPropTypes,
/**
* Specify how the `KeyboardAvoidingView` will react to the presence of
* the keyboard. It can adjust the height, position or bottom padding of the view
*/
behavior: PropTypes.oneOf(['height', 'position', 'padding']),

/**
Expand All @@ -61,7 +65,7 @@ const KeyboardAvoidingView = createReactClass({

/**
* This is the distance between the top of the user screen and the react native view,
* may be non-zero in some use cases.
* may be non-zero in some use cases. The default value is 0.
*/
keyboardVerticalOffset: PropTypes.number.isRequired,
},
Expand All @@ -81,7 +85,7 @@ const KeyboardAvoidingView = createReactClass({
subscriptions: ([]: Array<EmitterSubscription>),
frame: (null: ?ViewLayout),

relativeKeyboardHeight(keyboardFrame: ScreenRect): number {
_relativeKeyboardHeight(keyboardFrame: ScreenRect): number {
const frame = this.frame;
if (!frame || !keyboardFrame) {
return 0;
Expand All @@ -94,14 +98,14 @@ const KeyboardAvoidingView = createReactClass({
return Math.max(frame.y + frame.height - keyboardY, 0);
},

onKeyboardChange(event: ?KeyboardChangeEvent) {
_onKeyboardChange(event: ?KeyboardChangeEvent) {
if (!event) {
this.setState({bottom: 0});
return;
}

const {duration, easing, endCoordinates} = event;
const height = this.relativeKeyboardHeight(endCoordinates);
const height = this._relativeKeyboardHeight(endCoordinates);

if (duration && easing) {
LayoutAnimation.configureNext({
Expand All @@ -115,7 +119,7 @@ const KeyboardAvoidingView = createReactClass({
this.setState({bottom: height});
},

onLayout(event: ViewLayoutEvent) {
_onLayout(event: ViewLayoutEvent) {
this.frame = event.nativeEvent.layout;
},

Expand All @@ -132,12 +136,12 @@ const KeyboardAvoidingView = createReactClass({
componentWillMount() {
if (Platform.OS === 'ios') {
this.subscriptions = [
Keyboard.addListener('keyboardWillChangeFrame', this.onKeyboardChange),
Keyboard.addListener('keyboardWillChangeFrame', this._onKeyboardChange),
];
} else {
this.subscriptions = [
Keyboard.addListener('keyboardDidHide', this.onKeyboardChange),
Keyboard.addListener('keyboardDidShow', this.onKeyboardChange),
Keyboard.addListener('keyboardDidHide', this._onKeyboardChange),
Keyboard.addListener('keyboardDidShow', this._onKeyboardChange),
];
}
},
Expand All @@ -161,7 +165,7 @@ const KeyboardAvoidingView = createReactClass({
heightStyle = {height: this.frame.height - this.state.bottom, flex: 0};
}
return (
<View ref={viewRef} style={[style, heightStyle]} onLayout={this.onLayout} {...props}>
<View ref={viewRef} style={[style, heightStyle]} onLayout={this._onLayout} {...props}>
{children}
</View>
);
Expand All @@ -171,7 +175,7 @@ const KeyboardAvoidingView = createReactClass({
const { contentContainerStyle } = this.props;

return (
<View ref={viewRef} style={style} onLayout={this.onLayout} {...props}>
<View ref={viewRef} style={style} onLayout={this._onLayout} {...props}>
<View style={[contentContainerStyle, positionStyle]}>
{children}
</View>
Expand All @@ -181,14 +185,14 @@ const KeyboardAvoidingView = createReactClass({
case 'padding':
const paddingStyle = {paddingBottom: this.state.bottom};
return (
<View ref={viewRef} style={[style, paddingStyle]} onLayout={this.onLayout} {...props}>
<View ref={viewRef} style={[style, paddingStyle]} onLayout={this._onLayout} {...props}>
{children}
</View>
);

default:
return (
<View ref={viewRef} onLayout={this.onLayout} style={style} {...props}>
<View ref={viewRef} onLayout={this._onLayout} style={style} {...props}>
{children}
</View>
);
Expand Down