react native scrollView Height始终保持静态且不会更改

2g32fytz  于 2022-12-23  发布在  React
关注(0)|答案(5)|浏览(302)

我构建了react原生应用程序,并使用scrollView作为标题,并使用水平文本列表,问题是滚动视图的高度占了屏幕的一半,即使声明为样式,它仍然保持原样。
带有滚动视图的屏幕

<View style={Style.container} >
                {this.props.ExtendedNavigationStore.HeaderTitle ? <BackHeader header={this.props.ExtendedNavigationStore.HeaderTitle} onPressBack={this.goBack} /> : <Header openDrawer={this.openDrawer} />}
                <ScrollView  contentContainerStyle={{flexGrow:1}} style={Style.scrollableView} horizontal showsHorizontalScrollIndicator={false}>
                    {this.renderScrollableHeader()}
                </ScrollView>
                <Routes /> /* stack with dashboard screen */
            </View>
        </Drawer>

    )
}

花柱

import {StyleSheet} from 'react-native'
import {calcSize} from '../../utils'

const Styles = StyleSheet.create({
    container : {
        flex:1,  
        backgroundColor:"#e9e7e8"      
    },
    scrollableView:{
        height: calcSize(40),
        backgroundColor: '#000',

    },
    textCategory:{
        fontSize: calcSize(25),
        color:'#fff'
    },
    scrollableButton:{
        flex:1,
        margin:calcSize(30)
    }
})

export default Styles

正如你所看到的黑色大小是滚动视图,我希望它是小。
在路线堆叠成 Jmeter 板屏幕时,样式:

const Style = StyleSheet.create({
    container: {
        backgroundColor: '#9BC53D',
        flex: 1,
        justifyContent: 'space-around',
        alignItems: 'center'
    },
    text: {
        fontSize: 35,
        color: 'white',
        margin: 10,
        backgroundColor: 'transparent'
    },
    button: {
        width: 100,
        height: 75,
        margin: 20,
        borderWidth: 2,
        borderColor: "#ecebeb",
        justifyContent: "center",
        alignItems: "center",
        borderRadius: 40
    }
})
ztyzrc3y

ztyzrc3y1#

ScrollView存在一个现有的限制,即不能直接提供height
ScrollView包裹在另一个View中,并为该View给予高度。
比如

render() {
    return (
      <View style={styles.container}>
        <View style={{height: 80}} >
          <ScrollView
            horizontal
            style={{ backgroundColor: 'blue'}}
          >
            <Text style={{padding: 24}} >title1</Text>
            <Text style={{padding: 24}} >title2</Text>
            <Text style={{padding: 24}} >title3</Text>
            <Text style={{padding: 24}} >title4</Text>
            <Text style={{padding: 24}} >title5</Text>
          </ScrollView>
        </View>
      </View>
    );
  }

const styles = StyleSheet.create({
  container: {
    flex: 1,
    paddingTop: Constants.statusBarHeight,
    backgroundColor: '#ecf0f1',
  },
});

零食样品:https://snack.expo.io/HkVDBhJoz

EXTRAS:与高度不同,为ScrollView提供宽度将正常工作

5f0d552i

5f0d552i2#

在ScrollView样式中使用flexGrow:0

<ScrollView style={{ flexGrow:0 }}>
5anewei6

5anewei63#

这对我很有效:

<ScrollView contentContainerStyle={{ flexGrow: 1 }}>
  <View style={{ flexGrow: 1 }}>
    ...
  </View>
</ScrollView>
ujv3wf0j

ujv3wf0j4#

考虑到您将fixed height用于header,而将flex用于路由的问题,不同设备的 * 方向无法很好地扩展,并且看起来很奇怪 *。
因此,您可以考虑将其切换到flex
下面是将flexGrow添加到ScrollViewstyles的示例,因为它接受视图属性

<View style={{ flex: 1 }}>
  <ScrollView style={{ flexGrow: 0.05, backgroundColor: 'red', paddingTop: 50 }} horizontal>
    <View style={{ width: 100 }}><Text>Label</Text></View>
    <View style={{ width: 100 }}><Text>Label</Text></View>
    <View style={{ width: 100 }}><Text>Label</Text></View>
    <View style={{ width: 100 }}><Text>Label</Text></View>
    <View style={{ width: 100 }}><Text>Label</Text></View>
  </ScrollView>
  <View style={{ flex: 0.95, backgroundColor: 'green' }} />
</View>

这是snack expo的链接

sshcrbum

sshcrbum5#

在滚动视图样式内使用maxHeight

<ScrollView style={{ maxHeight: 40 }}>•••</ScrollView>

相关问题