在 React Native 的 SafeAreaView 中以绝对位置查看
View with absolute position in SafeAreaView in React Native
我需要放置一个 <View>
和 position: 'absolute'
以便它可以覆盖下面的另一个视图。我希望它不在 iOS 中的状态栏后面,所以我将所有内容都放在 <SafeAreaView>
.
中
不幸的是,绝对位置似乎是相对于全屏而不是其父视图(SafeAreaView
)。
有什么技巧吗?
const styles = StyleSheet.create({
safeAreaView: {
flex: 1,
},
map: {
flex: 1,
},
userLocationButton: {
position: 'absolute',
right: 12,
top: 12,
},
});
return (
<SafeAreaView style={styles.safeAreaView}>
<ClusteredMapView style={styles.map} />
)}
<TouchableOpacity style={styles.userLocationButton}>
<Image source={UserLocationButton} />
</TouchableOpacity>
)}
</SafeAreaView>
);
将状态栏大小值添加到绝对样式的顶部
通过此函数 getStatusBarHeight() 获取状态栏大小
import { Dimensions, Platform, StatusBar } from 'react-native';
function isIphoneX() {
const dimen = Dimensions.get('window');
return (
Platform.OS === 'ios' &&
!Platform.isPad &&
!Platform.isTVOS &&
(dimen.height === 812 ||
dimen.width === 812 ||
(dimen.height === 896 || dimen.width === 896))
);
}
export function getStatusBarHeight(skipAndroid) {
return Platform.select({
ios: isIPhoneX() ? 44 : 20,
android: skipAndroid ? 0 : StatusBar.currentHeight,
default: 0
})
}
我有同样的问题,通过用另一个视图包装绝对元素来解决它。
<SafeAreaView style={{flex: 1}}>
<View style={{flex: 1}}>
<TouchableOpacity style={{height: 40, width: 40, borderRadius: 20}} />
</View>
</SafeAreaView>
对我的情况有帮助的是将 overflow: hidden
样式添加到具有 absolute
位置的元素上方的 View
元素。
<SafeAreaView style={{ flex: 1 }}>
<View style={{ overflow: 'hidden' }}>
<View style={{ position: 'absolute' }}></View>
</View>
</SafeAreaView>
我需要放置一个 <View>
和 position: 'absolute'
以便它可以覆盖下面的另一个视图。我希望它不在 iOS 中的状态栏后面,所以我将所有内容都放在 <SafeAreaView>
.
不幸的是,绝对位置似乎是相对于全屏而不是其父视图(SafeAreaView
)。
有什么技巧吗?
const styles = StyleSheet.create({
safeAreaView: {
flex: 1,
},
map: {
flex: 1,
},
userLocationButton: {
position: 'absolute',
right: 12,
top: 12,
},
});
return (
<SafeAreaView style={styles.safeAreaView}>
<ClusteredMapView style={styles.map} />
)}
<TouchableOpacity style={styles.userLocationButton}>
<Image source={UserLocationButton} />
</TouchableOpacity>
)}
</SafeAreaView>
);
将状态栏大小值添加到绝对样式的顶部
通过此函数 getStatusBarHeight() 获取状态栏大小
import { Dimensions, Platform, StatusBar } from 'react-native';
function isIphoneX() {
const dimen = Dimensions.get('window');
return (
Platform.OS === 'ios' &&
!Platform.isPad &&
!Platform.isTVOS &&
(dimen.height === 812 ||
dimen.width === 812 ||
(dimen.height === 896 || dimen.width === 896))
);
}
export function getStatusBarHeight(skipAndroid) {
return Platform.select({
ios: isIPhoneX() ? 44 : 20,
android: skipAndroid ? 0 : StatusBar.currentHeight,
default: 0
})
}
我有同样的问题,通过用另一个视图包装绝对元素来解决它。
<SafeAreaView style={{flex: 1}}>
<View style={{flex: 1}}>
<TouchableOpacity style={{height: 40, width: 40, borderRadius: 20}} />
</View>
</SafeAreaView>
对我的情况有帮助的是将 overflow: hidden
样式添加到具有 absolute
位置的元素上方的 View
元素。
<SafeAreaView style={{ flex: 1 }}>
<View style={{ overflow: 'hidden' }}>
<View style={{ position: 'absolute' }}></View>
</View>
</SafeAreaView>