react-native: [Android] position: absolute shouldn't be cut off within a container with border
Description
If you have an element position: absolute
with negative offset within a container with a border, it’s going to be cut off, it’s like overflow: hidden
of the container is suddenly enabled by the border. But if you remove the border of the container, it works well. This issue only happens on Android.
#3198 is a similar issue, and was reported with lots of discussions. However, I believe they are not exactly the same.
Reproduction
I’ve made an example on rnplay to reproduce the issue.
Solution
TBD
Additional Information
- React Native version: 0.33 (rnplay), 0.39 (the version I currently use)
- Platform: Android
- Operating System: MacOS
About this issue
- Original URL
- State: open
- Created 7 years ago
- Reactions: 93
- Comments: 69 (10 by maintainers)
Workaround
Use an extra container and fake the overflow with it: https://snack.expo.io/@designorant/overflow-visible-android-workaround
Still an issue 😭
Any solution for this issue? I have also experience it on android development.
after some testing, it also happened when container has these styles
Facing this as well 😦
Works great on iOS:
And still an issue.
I fix it setting a elevation together the position.
For me the problem occurred with “Angular Material” on Tabs component, I put “overflow: visible !important;” on all containers and I finally found it!
If I add these classes, it works!
.mat-tab-body-wrapper { overflow: visible !important; }
.mat-tab-body.mat-tab-body-active { overflow: visible !important; }
anyone comes to save us~
+1 also having this issue.
Still an issue
check if this helps https://medium.com/@sibelius/solving-view-overflow-in-android-reactnative-f961752a75cd
Yes, react native has the
pointerEvents
prop.Still an issue for me.
This is an issue for me as well.
Yeah this is currently happening with me even when the containing view has no border nor border-radius. This is definitely an issue because, for example, I want to show a circular icon on the top + middle area of my modal window. You can see it getting cut off below:
Still an issue
@Nagibaba Thanks for this. I create snack with this approach https://snack.expo.io/@denisdov/android-overflow-fix
Still an issue…
I added a faker container:
<View style={{position: 'absolute', left: 0, right: 0, top: 0, bottom: 0, borderRadius: 4, backgroundColor: 'rgba(255,255,255, .15)', zIndex: 1 }} />
. Don’t useborderRadius, backgroundColor, zIndex
in real container, but only in fake container.<View style={s.realContainer } > <View style={{position: 'absolute', left: 0, right: 0, top: 0, bottom: 0, borderRadius: 4, backgroundColor: 'rgba(255,255,255, .15)' }} /> <Image /> </View>
If some have a solution for that it’s should be great. My java android skill is not good enough to make a PR 😦
@iway1 as explained by @sibelius, It is caused by ViewGroup#setClipChildren
Read more at https://medium.com/entria/solving-view-overflow-in-android-reactnative-f961752a75cd
THIS HAS WORKED FOR ME 100%
import React from ‘react’; import { StyleSheet, View, Text, ScrollView, Image, SafeAreaView, StatusBar, TextInput, Dimensions} from ‘react-native’;
const WIDTH = Dimensions.get(‘window’).width; const HEIGHT = Dimensions.get(‘window’).height; export default class App extends React.Component {
}
const styles = StyleSheet.create({
});
still an issue
To overcome this issue you can render a absolute positioned view with your background color on Android. Following code will work on android 😃
@brunolemos thanks! We did manage to fix out issue with
poitnerEvents="box-none"
and position absoluteI have this problem too in rn 0.51.0.
@designorant Thanks Michal for your advice! One question remains: Wouldn’t the “extraComponentContainer” prevent clicks/actions/events to elements/components below it?
I know in css there is “pointer-events”. When its set to “none” (e.g. pointer-events: none; ) The elements lets all events pass through to other elements below it. Anything like that in react-native?