我这样做的方法是使用flex 1获得一个视图(让我们称之为P),然后在该视图中有另外两个视图(C1和C2),分别使用flex 0.9和0.1(您可以将弹性高度更改为所需的值) 。然后,在C1内部有一个scrollview。这对我很有用。以下示例。
<View style={{flex: 1}}> <View style={{flex: 0.9}}> <ScrollView> <Text style={{marginBottom: 500}}>scrollable section</Text> </ScrollView> </View> <View style={{flex: 0.1}}> <Text>fixed footer</Text> </View> </View>
在清单文件中设置android:windowSoftInputMode =“adjustPan”,它将按预期工作。
下面是设置页脚和元素的代码.hope有帮助。
import React, { Component } from 'react'; import { StyleSheet, View, Text, ScrollView } from 'react-native'; export default class App extends render() { return ( <View style={styles.containerMain}> <ScrollView> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> <Text> Main Content Here</Text> </ScrollView> <View style={styles.bottomView}> <Text style={styles.textStyle}>Bottom View</Text> </View> </View> ); } } const styles = StyleSheet.create({ containerMain: { flex: 1, alignItems: 'center', }, bottomView: { width: '100%', height: 50, backgroundColor: '#EE5407', justifyContent: 'center', alignItems: 'center', position: 'absolute', bottom: 0, }, textStyle: { color: '#fff', fontSize: 18, }, });
最好的方法是使用justifyContent属性
<View style={{flexDirection:'column',justifyContent:'flex-end'}}> <View> <Text>fixed footer</Text> </View> </View>
如果您在屏幕上有多个视图元素,那么您可以使用
<View style={{flexDirection:'column',justifyContent:'space-between'}}> <View> <Text>view 1</Text> </View> <View> <Text>view 2</Text> </View> <View> <Text>fixed footer</Text> </View> </View>
对于Android的问题:
在app / src / AndroidManifest.xml中将windowSoftInputMode更改为以下内容。
<activity android:windowSoftInputMode="stateAlwaysHidden|adjustPan">
我在使用react-native和keyboardAwareScroll的ios中完全没有问题。我准备实施大量代码来解决这个问题,直到有人给我这个解决方案。工作得很完美。
这是基于Colin的Ramsay答案的实际代码:
<View style={{flex: 1}}> <ScrollView>main</ScrollView> <View><Text>footer</Text></View> </View>
我在我的应用程序中使用固定页脚按钮。我实现固定页脚的方式是这样的:
<View style={{flex: 1}}> <View><Text>my text</Text></View> <View style={{position: 'absolute', left: 0, right: 0, bottom: 0}}><Text>My fixed footer</Text></View> </View>
如果在键盘出现时需要向上移动页脚,您可以使用:
const { DeviceEventEmitter } = React class MyClass { constructor() { this.state = { btnLocation: 0 } } componentWillMount() { DeviceEventEmitter.addListener('keyboardWillShow', this.keyboardWillShow.bind(this)) DeviceEventEmitter.addListener('keyboardWillHide', this.keyboardWillHide.bind(this)) } keyboardWillShow(e) { this.setState({btnLocation: e.endCoordinates.height}) } keyboardWillHide(e) { this.setState({btnLocation: 0}) } }
然后在固定的页脚类中使用{bottom:this.state.btnLocation}。我希望这有帮助!
当flex是正数时,它使组件具有灵活性,并且其大小将与其弹性值成比例。因此,将flex设置为2的组件将弹性设置为1的组件占用两倍的空间。
<View style={{flex: 1}> <ScrollView> //your scroll able content will be placed above your fixed footer content. //when your content will grow bigger and bigger it will hide behind //footer content. </ScrollView> <View style={styles.footerContainer}> //your fixed footer content will sit fixed below your screen </View> </View>
我发现使用flex是最简单的解决方案。
<View style={{flex:1, justifyContent: 'space-around', alignItems: 'center', flexDirection: 'row',}}> <View style={{flex:8}}> //Main Activity </View> <View style={{flex:1}}> //Footer </View> </View>
如果您只是使用react native,那么您可以使用以下代码
<View style={{flex:1}}> {/* Your Main Content*/} <View style={{flex:3}}> <ScrollView> {/* Your List View ,etc */} </ScrollView> </View> {/* Your Footer */} <View style={{flex:1}}> {/*Elements*/} </View> </View>
另外,你可以使用 https://docs.nativebase.io/ 在您的反应本机项目中,然后执行以下操作
<Container> {/*Your Main Content*/} <Content> <ScrollView> {/* Your List View ,etc */} </ScrollView> </Content> {/*Your Footer*/} <Footer> {/*Elements*/} </Footer> </Container>
您可能还想看看NativeBase( http://nativebase.io )。这是React Native的一个组件库,包含一些不错的布局结构( http://nativebase.io/docs/v2.0.0/components#anatomy )包括页眉和页脚。
这有点像Bootstrap for Mobile。
首先获得Dimension,然后通过flex样式对其进行操作
var Dimensions = require('Dimensions') var {width, height} = Dimensions.get('window')
在渲染中
<View style={{flex: 1}}> <View style={{width: width, height: height - 200}}>main</View> <View style={{width: width, height: 200}}>footer</View> </View>
另一种方法是使用flex
<View style={{flex: 1}}> <View style={{flex: .8}}>main</View> <View style={{flex: .2}}>footer</View> </View>
在我的头顶,你可以做到这一点 滚动型 。您的顶级容器可以是一个Flex容器,其内部有一个ScrollView,底部有一个页脚。然后在ScrollView内部正常放置你的应用程序的其余部分。
这里简单的东西:
如果您不需要ScrollView这种方法,您可以使用下面的代码来实现这样的事情:
<View style={{flex: 1, backgroundColor:'grey'}}> <View style={{flex: 1, backgroundColor: 'red'}} /> <View style={{height: 100, backgroundColor: 'green'}} /> </View>
我认为最好也很容易,如下图所示,只需将内容和页脚的其余部分放在单独的视图中即可。
`<Container> <Content> <View> Ur contents </View> </Content> <View> Footer </View> </Container>`
或者你可以使用本地基础的页脚
`<Container> <Content> <View> Ur contents </View> </Content> <Footer> Footer </Footer> </Container>`