fix(ui): stabilize modal keyboard behavior
All checks were successful
Luggage List Build / build-web (push) Successful in 55s
Luggage List Build / build-android (push) Successful in 6m28s
Luggage List Build / release (push) Successful in 10s

This commit is contained in:
2026-04-18 14:12:34 +02:00
parent ef7e0ba7a1
commit bd500674a0
4 changed files with 18 additions and 7 deletions

View File

@@ -38,3 +38,4 @@ Improving & Fixing Bugs (V3)
- [x] Added check-up stats (correct/bad/pending) and persisted per snapshot - [x] Added check-up stats (correct/bad/pending) and persisted per snapshot
- [x] Extra UI polish pass (spacing, cards, hierarchy) - [x] Extra UI polish pass (spacing, cards, hierarchy)
- [x] Centered and enlarged edit/check-up modals to fully overlay nav - [x] Centered and enlarged edit/check-up modals to fully overlay nav
- [x] Fixed modal keyboard glitching (stable centered keyboard-aware layout)

View File

@@ -15,7 +15,7 @@ export default function CheckupFixModal({
return ( return (
<Modal visible={visible} animationType="slide" transparent> <Modal visible={visible} animationType="slide" transparent>
<View style={styles.modalBackdrop}> <View style={styles.modalBackdrop}>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'padding' : 'height'} style={styles.modalKeyboardWrap}> <KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'padding' : undefined} style={styles.modalKeyboardWrap}>
<View style={styles.modalCard}> <View style={styles.modalCard}>
<View style={styles.sectionRow}> <View style={styles.sectionRow}>
<Text style={styles.sectionTitle}>Update for this Check-Up</Text> <Text style={styles.sectionTitle}>Update for this Check-Up</Text>
@@ -24,7 +24,12 @@ export default function CheckupFixModal({
</Pressable> </Pressable>
</View> </View>
<ScrollView keyboardShouldPersistTaps="handled" showsVerticalScrollIndicator={false}> <ScrollView
keyboardShouldPersistTaps="handled"
keyboardDismissMode="interactive"
contentContainerStyle={{ paddingBottom: 12 }}
showsVerticalScrollIndicator={false}
>
<Field label="Status"> <Field label="Status">
<ChipGroup <ChipGroup
options={ITEM_STATUSES} options={ITEM_STATUSES}

View File

@@ -16,7 +16,7 @@ export default function ItemModal({
return ( return (
<Modal visible={visible} animationType="slide" transparent> <Modal visible={visible} animationType="slide" transparent>
<View style={styles.modalBackdrop}> <View style={styles.modalBackdrop}>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'padding' : 'height'} style={styles.modalKeyboardWrap}> <KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'padding' : undefined} style={styles.modalKeyboardWrap}>
<View style={styles.modalCard}> <View style={styles.modalCard}>
<View style={styles.sectionRow}> <View style={styles.sectionRow}>
<Text style={styles.sectionTitle}>{itemForm.id ? 'Update Item' : 'Add Item'}</Text> <Text style={styles.sectionTitle}>{itemForm.id ? 'Update Item' : 'Add Item'}</Text>
@@ -25,7 +25,12 @@ export default function ItemModal({
</Pressable> </Pressable>
</View> </View>
<ScrollView keyboardShouldPersistTaps="handled" showsVerticalScrollIndicator={false}> <ScrollView
keyboardShouldPersistTaps="handled"
keyboardDismissMode="interactive"
contentContainerStyle={{ paddingBottom: 12 }}
showsVerticalScrollIndicator={false}
>
<Field label="Name"> <Field label="Name">
<TextInput <TextInput
style={styles.input} style={styles.input}

View File

@@ -400,17 +400,17 @@ export const styles = StyleSheet.create({
modalBackdrop: { modalBackdrop: {
flex: 1, flex: 1,
backgroundColor: 'rgba(2,6,23,0.72)', backgroundColor: 'rgba(2,6,23,0.72)',
justifyContent: 'center',
alignItems: 'center',
paddingHorizontal: 12, paddingHorizontal: 12,
}, },
modalKeyboardWrap: { modalKeyboardWrap: {
flex: 1,
width: '100%', width: '100%',
alignItems: 'center', alignItems: 'center',
justifyContent: 'center',
}, },
modalCard: { modalCard: {
width: '96%', width: '96%',
maxHeight: '92%', maxHeight: '90%',
backgroundColor: '#0f172a', backgroundColor: '#0f172a',
borderRadius: 20, borderRadius: 20,
borderWidth: 1, borderWidth: 1,