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.
I've made an example on rnplay to reproduce the issue.
TBD
Same here. This is really frustrating
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:
Any solution for this issue? I have also experience it on android development.
I can't find any way around this, guess we are just stuck with different styling for Android.
Same issue here, view with absolute positioning and negative top
works on iOS but got cut off on Android
Facing this as well :(
Works great on iOS:
This is an issue for me as well.
@grabbou @bvaughn know any android dev that could help us with this bug?
If some have a solution for that it's should be great.
My java android skill is not good enough to make a PR :(
+1 also having this issue.
Has been a big problem here too. Anybody found a fix?
Also having this problem with Android, neither overflow: hidden
, nor zIndex: 1000
seem to fix the problem!
Same here. Needs a fix!
What are you doing to positioning elements in relationship to another one?
E.g. for tooltips etc.?
Use an extra container and fake the overflow with it:
https://snack.expo.io/@designorant/overflow-visible-android-workaround
import React, { Component } from "react";
import { View, Text, StyleSheet } from "react-native";
export default class App extends Component {
render() {
return (
<View style={styles.mainContainer}>
<View style={styles.componentContainer}>
<View style={[styles.element, styles.element1]} />
<Text style={styles.text}>overflow: "visible"</Text>
</View>
<View style={styles.extraComponentContainer}>
<View style={[styles.element, styles.element2]} />
<View style={styles.componentContainer}>
<Text style={styles.text}>extra container workaround</Text>
</View>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
mainContainer: {
flex: 1,
alignItems: "center",
justifyContent: "space-around"
},
componentContainer: {
backgroundColor: "#d3d3d3",
borderWidth: 1,
borderColor: "grey",
width: 200,
height: 200,
position: "relative",
overflow: "visible" // doesn't do anything
},
extraComponentContainer: {
// fakes overflow but requires more markup
backgroundColor: "#ffff00",
paddingTop: 20,
paddingLeft: 20,
paddingBottom: 20,
paddingRight: 20,
position: "relative"
},
element: {
backgroundColor: "#ff0000",
width: 40,
height: 40
},
element1: {
position: "absolute",
top: -20,
left: -20
},
element2: {
position: "absolute",
top: 0,
left: 0,
zIndex: 100,
elevation: 100
},
text: {
textAlign: "right",
backgroundColor: "transparent"
}
});
@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?
Yes, react native has the pointerEvents
prop.
I have this problem too in rn 0.51.0.
after some testing, it also happened when container has these styles
Thank you @brunolemos !! I had so much stupid layouts to try and get this to work. A full page 'container' View with pointerEvents='none' was all I needed!
@brunolemos thanks! We did manage to fix out issue with poitnerEvents="box-none"
and position absolute
<View style={ styles.container }>
<TouchableOpacity style={ styles.menuButton } onPress={ this.toggleMenu }>
<Ionicons name="ios-menu" size={ 32 } color="#fff" />
</TouchableOpacity>
<Text style={ styles.headerTitle }>VERUS</Text>
<View style={ styles.menu } pointerEvents="box-none">
<Fade visible={ this.state.menuVisible }>
{ menuItems.map( this.renderMenuitem ) }
</Fade>
</View>
</View>
import EStyleSheet from 'react-native-extended-stylesheet';
const styles = EStyleSheet.create( {
$headerHeight: 50,
container: {
flexDirection: 'row',
alignItems: 'center',
// backgroundColor: '#0050aa',
paddingHorizontal: 10,
height: '$headerHeight',
position: 'relative',
},
menuButton: {
marginTop: 3,
},
headerTitle: {
marginLeft: 10,
color: '#fff',
fontSize: 16,
fontWeight: '700',
},
menu: {
position: 'absolute',
top: '$headerHeight',
left: 10,
},
menuItem: {
padding: 10,
backgroundColor: '#0050aa',
borderBottomWidth: 1,
borderBottomColor: '#eee',
},
menuItemName: {
color: '#fff',
fontWeight: '700',
},
} );
export default styles;
I am still facing this issue. If I do not add backgroundColor
to the container, then it works perfectly fine. It only happens on Android.
To overcome this issue you can render a absolute positioned view with your background color on Android. Following code will work on android :)
<View style={{ flex: 1, backgroundColor: 'red' }}>
<View style={{ height: 200, backgroundColor: 'green' }} />
<View style={{ height: 200 }}>
<View style={{ position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, backgroundColor: 'yellow' }} />
<View style={{ height: 50, width: 50, backgroundColor: 'aqua', position: 'absolute', top: -20 }} />
</View>
</View>
I was working on an order summary page in which I need to show all orders made by user. Facing similar issue on android. Tried workaround @designorant suggested and it works fine.
Here is the sample code if it helps anyone :)
https://snack.expo.io/@harkiratsaluja/timeline
Did anyone find a fix? This issue still exists. I am trying to create a hamburger menu (vertical dropdown) and the container with menu items gets clipped inside the header rendered by react-navigation. This only happens on Android.
check if this helps https://medium.com/@sibelius/solving-view-overflow-in-android-reactnative-f961752a75cd
Hey there, it looks like there has been no activity on this issue recently. Has the issue been fixed, or does it still require the community's attention? This issue may be closed if no further activity occurs. You may also label this issue as "For Discussion" or "Good first issue" and I will leave it open. Thank you for your contributions.
the issue hasn't yet been fixed. @stale don't close the issue
I am still facing this issue.
Still an issue ðŸ˜
And 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 use borderRadius, 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>
Hey there, it looks like there has been no activity on this issue recently. Has the issue been fixed, or does it still require the community's attention? This issue may be closed if no further activity occurs. You may also label this issue as "For Discussion" or "Good first issue" and I will leave it open. Thank you for your contributions.
Still an issue for me.
@Nagibaba Thanks for this. I create snack with this approach https://snack.expo.io/@denisdov/android-overflow-fix
Still an issue
still an issue
still an issue
Still an issue...
very simple pass a style prop of zIndex:1 to the view that is absolute to make it rise on top of the others
@pinchez254 not work for me
try creating an extra container outside the one in absolute position and
give it a Zindex of -1
On Mon, Apr 15, 2019 at 2:17 PM LeeHoo notifications@github.com wrote:
@pinchez254 https://github.com/pinchez254 not work for me
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/facebook/react-native/issues/12534#issuecomment-483210401,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AlWEKm333hGU6ZKKJKajMIgoZJZcgyXqks5vhF-9gaJpZM4MJgAJ
.
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 {
render() {
return (
<ScrollView horizontal={false} showsVerticalScrollIndicator={false}>
<View style={styles.container}>
<View style={styles.recent}>
<Text>Recent</Text>
</View>
</View>
</ScrollView>
);
}
}
const styles = StyleSheet.create({
container:{
flex:1,
width:WIDTH,
height:HEIGHT,
overflow:'visible',
position:'relative',
},
recent:{
width:'100%',
height:30,
position:'absolute',
top:100,
left:40,
backgroundColor:'#eee',
},
});
import React, { Component } from 'react';
import { Text, View, StyleSheet, ScrollView, Image} from 'react-native';
export default class Practise extends Component{
render(){
let pic = {
uri: 'http://www.sclance.com/images/user/User_1176706.png'
};
return(
<View style={{backgroundColor: '#fff', height: 100, width: 280, position: 'absolute', top: 160,}}>
</View>
</View>
</ScrollView>
);
}
}
This is the issue that i am facing plz check the code and screenshot too
problem is only when, wwhen we are using srolllview
Still an issue
anyone comes to save us~
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;
}
Hey there, it looks like there has been no activity on this issue recently. Has the issue been fixed, or does it still require the community's attention? This issue may be closed if no further activity occurs. You may also label this issue as a "Discussion" or add it to the "Backlog" and I will leave it open. Thank you for your contributions.
I don't think this should be closed yet :|
I fix it setting a elevation together the position.
elevation : 10, position: "absolute"
Hey there, it looks like there has been no activity on this issue recently. Has the issue been fixed, or does it still require the community's attention? This issue may be closed if no further activity occurs. You may also label this issue as a "Discussion" or add it to the "Backlog" and I will leave it open. Thank you for your contributions.
I don't think this should be closed yet. Tho there is a workaround with the elevation property. Unless it is not a workaround but the correct way of doing it which is not documented good enough.
I resolved using react-native Modal as wrapper:
https://reactnative.dev/docs/modal
can not find the reproducible example.
Here reproducible example
https://snack.expo.io/@fabrizio.bertoglio/overflow-visible-android-workaround
I quote Is it a bad practice to use negative margins in Android?
I quote Is it a bad practice to use negative margins in Android?
Actually what android does should not matter because react-native does not use any android layout system, they use flexbox implemented using yoga.
Most helpful comment
Still an issue ðŸ˜