绝对定位视图在反应本机中不作为覆盖
Absolute positioned View is not functioning as an overlay in react-native
在 react-native 中添加了一个绝对定位的透明视图,以在异步 api 调用时显示进度加载器。但是叠加层后面的输入和按钮仍然可以按下并响应。
<SafeAreaView style={styles.container}>
{this.state.isLoading &&
<View
style={{
position: 'absolute', elevation: 5, backgroundColor: 'rgba(0,0,0,0.3)',
top: 0, bottom: 0, left: 0, right: 0,
zIndex:10
}}
/>
}
<View style={{ flexGrow: 5, flexShrink: 5, flexBasis: 100, alignItems: 'center' }}>
<Image style={{ width: 200, flex: 1 }} source={require('res/images/one.png')} resizeMode='contain' />
</View>
<View style={{ flexGrow: 1, paddingLeft: 30, paddingRight: 30 }}>
<Item regular>
<Input
placeholder="username123"
autoCompleteType="username"
onChangeText={(username) => this.setState({ username })}
value={this.state.username}
/>
</Item>
<Button block onPress={this.onClick}
style={styles.button}>
<Text style={styles.buttonText}>Login</Text>
</Button>
</View>
</SafeAreaView>
PS:没有 elevation:5
按钮出现在叠加层上方(使用本机基础 buttons/controls)。
没有 zIndex 图像将出现在叠加层上方
发生这种情况的原因是 React 组件树是如何呈现的,因为您在输入字段和按钮上方显示叠加层,它们仍在叠加层上方,您需要做的就是将叠加层从上到下移动.
<SafeAreaView style={styles.container}>
<View style={{ flexGrow: 5, flexShrink: 5, flexBasis: 100, alignItems: 'center' }}>
<Image style={{ width: 200, flex: 1 }} source={require('res/images/one.png')} resizeMode='contain' />
</View>
<View style={{ flexGrow: 1, paddingLeft: 30, paddingRight: 30 }}>
<Item regular>
<Input
placeholder="username123"
autoCompleteType="username"
onChangeText={(username) => this.setState({ username })}
value={this.state.username}
/>
</Item>
<Button block onPress={this.onClick}
style={styles.button}>
<Text style={styles.buttonText}>Login</Text>
</Button>
</View>
{/* Moved below the form */}
{this.state.isLoading &&
<View
style={{
position: 'absolute', elevation: 5, backgroundColor: 'rgba(0,0,0,0.3)',
top: 0, bottom: 0, left: 0, right: 0,
zIndex:10
}}
/>
}
</SafeAreaView>
在 react-native 中添加了一个绝对定位的透明视图,以在异步 api 调用时显示进度加载器。但是叠加层后面的输入和按钮仍然可以按下并响应。
<SafeAreaView style={styles.container}>
{this.state.isLoading &&
<View
style={{
position: 'absolute', elevation: 5, backgroundColor: 'rgba(0,0,0,0.3)',
top: 0, bottom: 0, left: 0, right: 0,
zIndex:10
}}
/>
}
<View style={{ flexGrow: 5, flexShrink: 5, flexBasis: 100, alignItems: 'center' }}>
<Image style={{ width: 200, flex: 1 }} source={require('res/images/one.png')} resizeMode='contain' />
</View>
<View style={{ flexGrow: 1, paddingLeft: 30, paddingRight: 30 }}>
<Item regular>
<Input
placeholder="username123"
autoCompleteType="username"
onChangeText={(username) => this.setState({ username })}
value={this.state.username}
/>
</Item>
<Button block onPress={this.onClick}
style={styles.button}>
<Text style={styles.buttonText}>Login</Text>
</Button>
</View>
</SafeAreaView>
PS:没有 elevation:5
按钮出现在叠加层上方(使用本机基础 buttons/controls)。
没有 zIndex 图像将出现在叠加层上方
发生这种情况的原因是 React 组件树是如何呈现的,因为您在输入字段和按钮上方显示叠加层,它们仍在叠加层上方,您需要做的就是将叠加层从上到下移动.
<SafeAreaView style={styles.container}>
<View style={{ flexGrow: 5, flexShrink: 5, flexBasis: 100, alignItems: 'center' }}>
<Image style={{ width: 200, flex: 1 }} source={require('res/images/one.png')} resizeMode='contain' />
</View>
<View style={{ flexGrow: 1, paddingLeft: 30, paddingRight: 30 }}>
<Item regular>
<Input
placeholder="username123"
autoCompleteType="username"
onChangeText={(username) => this.setState({ username })}
value={this.state.username}
/>
</Item>
<Button block onPress={this.onClick}
style={styles.button}>
<Text style={styles.buttonText}>Login</Text>
</Button>
</View>
{/* Moved below the form */}
{this.state.isLoading &&
<View
style={{
position: 'absolute', elevation: 5, backgroundColor: 'rgba(0,0,0,0.3)',
top: 0, bottom: 0, left: 0, right: 0,
zIndex:10
}}
/>
}
</SafeAreaView>