#react-native
#react-native
Вопрос:
Как бы я мог применить другой стиль нижнего колонтитула в react native в зависимости от высоты конкретного ScrollView?
В принципе, я хочу создать липкий нижний колонтитул для вида, который не занимает всю высоту телефона, и, если ScrollView больше, я хочу добавить нижний колонтитул в конец ScrollView.
Надеюсь, это имеет хоть какой-то смысл!
Пример ниже для демонстрации.
Спасибо, Саймон
//If the view is larger than the phone height, have the footer at the bottom of the scroll view
<View style={{flex: 1}}>
<Header navigation={this.prop.navigation}
<Scrollview>
<View>
<Text>Content</Text>
</View>
<View>
<Image source={image} style={styles.footerImage} />
</View>
</ScrollView>
</View>
//If the content view is smaller than the phone size, the view needs to be outside the scrollview and use stick styles
<View style={{flex: 1}}>
<Header navigation={this.prop.navigation}
<Scrollview>
<View>
<Text>Content</Text>
</View>
</ScrollView>
<View>
<Image source={image} style={styles.stickyFooter} />
</View>
</View>
const styles = StyleSheet.create({
footerImage: {
width: Dimensions.get('window').width,
maxHeight: 235,
resizeMode: "contain"
},
stickyFooter: {
flex: 1,
position: 'absolute',
left: 0,
top: 0,
width: Dimensions.get('window').width,
height: Dimensions.get('window').height,
},
});
Ответ №1:
Чао, вы могли бы переместить положение нижнего колонтитула с помощью minHeight
на Scrollview
css. Что-то вроде:
<Scrollview style={styles.scrollview}>
<View>
<Text>Content</Text>
</View>
</ScrollView>
Затем в ваших стилях:
const styles = StyleSheet.create({
...
scrollview:{
minHeight: 300 // 300 for example
}
});
Таким образом, если Scrollview
не содержит элементов, нижний колонтитул отображается после 300. В противном случае, если Scrollview
содержит элементы и его высота превышает 300, нижний колонтитул будет перемещен вниз в соответствии с Scrollview
высотой.
Ответ №2:
import React from 'react';
import {
Text,
View,
StyleSheet,
ScrollView,
Dimensions,
Image,
} from 'react-native';
export default function App() {
return (
<View>
<ScrollView>
<View style={styles.body}>
<Text>Body</Text>
</View>
<View style={styles.footer}>
<Text>Footer</Text>
</View>
</ScrollView>
</View>
);
}
const { height } = Dimensions.get('window');
const styles = StyleSheet.create({
body: {
minHeight: height, // This is where the magic happens
backgroundColor: 'blue', // This is just for visual indication
},
footer: {
minHeight: 150,
backgroundColor: 'green' // This is just for visual indication
}
});
Должно работать для разных высот экрана.