2 回答
TA贡献1831条经验 获得超4个赞
我建议您尝试将屏幕的所有内容都包裹起来<KeyboardAvoidingView />(或使其成为最外面的元素之一),否则它只会向上滑动其子项(View 和 TextInput),而将其余内容留在其原始位置,使布局看起来重叠和怪异。如果你这样做,值“位置”应该可以正常工作。
像这样的东西:
<View style={style.main}>
<Appbar title="New activity" canGoBack goBack={goBack} />
<KeyboardAvoidingView behavior="position" >
<View style={{ flex: 1 }}> // --> Remove flex: 1 if you experience some issue with the positioning
<View style={style.iconSelecter}>
<GestureRecognizer onSwipeLeft={nextIcon} onSwipeRight={lastIcon}>
<Image style={style.icon} source={icons[currentIconIndex]?.file}></Image>
</GestureRecognizer>
</View>
<View style={style.hintWrapper}>
<Text style={style.hint}>Swipe to cycle through the icons</Text>
</View>
<KeyboardAvoidingView>
<View style={style.textInputWrapper}>
<TextInput style={style.textInput} placeholder={"Give this activity a name"} value={name} onChangeText={setName}></TextInput>
</View>
</KeyboardAvoidingView>
<TouchableNativeFeedback onPress={createActivity} background={TouchableNativeFeedback.Ripple("#fff", true)}>
<View style={style.saveButton}>
<Image style={style.saveIcon} source={require("../../assets/icons/light/save.png")}></Image>
</View>
</TouchableNativeFeedback>
</View>
</KeyboardAvoidingView>
</View>
另请参阅上面代码中的注释。检查您是否真的需要在所有外包装元素中使用 flex: 1 ,并查看height您在style.main基于维度中设置的内容。我不认为这是必要的,我认为如果您修复父容器的高度,它可能会导致一些测量问题。
编辑:
我只是在挖掘 react-native 文档,我意识到有一个 zIndex 可以用来避免绝对定位。它是一个相对风格的道具,因此需要在兄弟视图之间设置,如下所示:
export default class MyComponent extends React.Component {
render() {
return (
<View>
<View style={[styles.appbarShape, styles.appbarZIndex]} ><Text>Header</Text></View>
<KeyboardAvoidingView behavior="position" style={styles.contentZIndex}>
{other children}
<TextInput placeholder="enter text"/>
</KeyboardAvoidingView>
</View>
);
}
}
const styles = StyleSheet.create({
appbarShape: {
height: 80,
width: Dimensions.get('window').width,
justifyContent: 'center',
alignSelf: "stretch",
backgroundColor: "#FFF"
},
appbarZIndex: {
zIndex: 3,
},
contentZIndex: {
zIndex: 0
}
});
由于代表 appbar 的视图具有更大的 zIndex,因此它显示在具有较低 zIndex 的视图之上查看此小吃https://snack.expo.io/5VXAcw4Y0的工作
文档:https ://reactnative.dev/docs/layout-props
TA贡献2051条经验 获得超10个赞
利用react-native-keyboard-aware-scroll-view
<KeyboardAwareScrollView extraHeight={135} enabledOnAndroid={true}
extraScrollHeight={70} style={styles.mainContainer}
automaticallyAdjustContentInsets={true}
enableOnAndroid={true}
keyboardShouldPersistTaps='handled'
scrollEnabled={true} >
//your form
</KeyboardAwareScrollView>
const styles = StyleSheet.create({
mainContainer: { flex: 1, marginHorizontal: 15, marginVertical: 15 },
});
添加回答
举报