-
Notifications
You must be signed in to change notification settings - Fork 24.9k
Open
Labels
Component: ScrollViewIssue: Author Provided ReproThis issue can be reproduced in Snack or an attached project.This issue can be reproduced in Snack or an attached project.Needs: AttentionIssues where the author has responded to feedback.Issues where the author has responded to feedback.Newer Patch Available
Description
Description
I use this component:
import React, { forwardRef } from "react";
import {
ScrollView,
ScrollViewProps,
View,
} from "react-native";
export type KeyboardAwareScrollViewProps = {
/** The distance between keyboard and focused `TextInput` when keyboard is shown. Default is `0`. */
bottomOffset?: number;
/** Prevents automatic scrolling of the `ScrollView` when the keyboard gets hidden, maintaining the current screen position. Default is `false`. */
disableScrollOnKeyboardHide?: boolean;
/** Controls whether this `KeyboardAwareScrollView` instance should take effect. Default is `true` */
enabled?: boolean;
/** Adjusting the bottom spacing of KeyboardAwareScrollView. Default is `0` */
extraKeyboardSpace?: number;
/** Custom component for `ScrollView`. Default is `ScrollView` */
ScrollViewComponent?: React.ComponentType<ScrollViewProps>;
} & ScrollViewProps;
const KeyboardAwareScrollView = forwardRef<
ScrollView,
React.PropsWithChildren<KeyboardAwareScrollViewProps>
>(
(
{
children,
...rest
},
ref,
) => {
return (
<>
<ScrollView {...rest} scrollEventThrottle={16}>
{children}
<View style={{height: 336, backgroundColor: 'red'}} />
</ScrollView>
</>
);
},
);
export default KeyboardAwareScrollView;
And I use it the code:
import React, { useCallback, useEffect, useRef, useState } from "react";
import { Button, Platform, Switch, Text, View, TextInput, StyleSheet } from "react-native";
export default function AwareScrollView() {
const [_, setText] = useState("");
return (
<View style={styles.main}>
<KeyboardAwareScrollView>
<View style={styles.contentContainer}>
<TextInput
style={styles.contentText}
multiline
value={_}
onChangeText={(value) => setText(value)}
scrollEnabled={false}
/>
</View>
</KeyboardAwareScrollView>
</View>
);
}
export const styles = StyleSheet.create({
safeAreaView: {
flex: 1,
},
main: {
flex: 1,
marginBottom: 0,
},
contentContainer: {
padding: 15,
flexGrow: 1,
},
contentText: {
width: "100%",
backgroundColor: "#bcbcbc",
flex: 1,
fontSize: 16,
minHeight: 60,
textAlignVertical: "top",
},
});
Steps to reproduce
- Type a long message in multiline input (you can simply press Enter/move to the next line to speed up the process)
- When TextInput gets obscured by keyboard scroll till the bottom to make sure the bottom of TextInput is visible
- Start to type a long message (you can use predictive text to speed up the process)
- When text goes to a new line
ScrollView
suddenly scrolls to top
Expected result is that ScrollView
should remain its position.
React Native Version
0.76.2
Affected Platforms
Runtime - iOS
Output of npx react-native info
System:
OS: macOS 15.1
CPU: (10) arm64 Apple M1 Pro
Memory: 118.81 MB / 32.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 20.18.0
path: ~/.nvm/versions/node/v20.18.0/bin/node
Yarn:
version: 1.22.22
path: ~/.nvm/versions/node/v20.18.0/bin/yarn
npm:
version: 10.8.2
path: ~/.nvm/versions/node/v20.18.0/bin/npm
Watchman:
version: 2024.10.21.00
path: /opt/homebrew/bin/watchman
Managers:
CocoaPods:
version: 1.14.3
path: /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 24.1
- iOS 18.1
- macOS 15.1
- tvOS 18.1
- visionOS 2.1
- watchOS 11.1
Android SDK: Not Found
IDEs:
Android Studio: 2024.2 AI-242.23339.11.2421.12483815
Xcode:
version: 16.1/16B40
path: /usr/bin/xcodebuild
Languages:
Java:
version: 17.0.9
path: /usr/bin/javac
Ruby:
version: 2.7.6
path: /Users/kirylziusko/.rbenv/shims/ruby
npmPackages:
"@react-native-community/cli":
installed: 15.0.1
wanted: 15.0.1
react:
installed: 18.3.1
wanted: 18.3.1
react-native:
installed: 0.76.2
wanted: 0.76.2
react-native-macos: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: true
newArchEnabled: false
iOS:
hermesEnabled: true
newArchEnabled: false
Stacktrace or Logs
I don't have any logs, bug from what I debugged in XCode methods like `scrollToOffset`/`scrollToEnd`/`scrollViewShouldScrollToTop` are not getting called.
Reproducer
Screenshots and Videos
ScreenRecording_12-30-2024.12-25-01.PM_1.MP4
kirillzyusko, mk-nickyang and TimurKrmk-nickyang and kirillzyusko
Metadata
Metadata
Assignees
Labels
Component: ScrollViewIssue: Author Provided ReproThis issue can be reproduced in Snack or an attached project.This issue can be reproduced in Snack or an attached project.Needs: AttentionIssues where the author has responded to feedback.Issues where the author has responded to feedback.Newer Patch Available