그림자를 어떻게 렌더링합니까?
뷰에서 그림자를 어떻게 렌더링합니까? 나는 shadowColor, shadowOffset, shadowOpacity 및 shadowRadius의 많은 조합을 시도했지만 아무것도하지 않는 것 같습니다. 내가 설정 한 다른 속성이 작동하기 때문에 스타일이 올바르게 적용되었다고 확신합니다.
이 글은 네이티브 반작용 버그가 나타납니다 shadowOpacity
입력 설정 CGFloat
대신 float
에 따라 의 CALayer의 문서 . 수정하기 전에 iPhone 5 시뮬레이터를 사용하십시오. ( CGFloat
이다 float
오래된 장치에서.)
이것을 추적하는 React Native 문제는 다음과 같습니다.
https://github.com/facebook/react-native/issues/449
React-Native 0.40을 사용하고 있으며 아래 코드는 IOS와 Android 모두에서 작동합니다.
(Android 전용) Android의 기본 고도 API를 사용하여보기 의 고도 를 설정합니다 . 이렇게하면 항목에 그림자가 추가되고 겹치는 뷰의 z 순서에 영향을줍니다. Android 5.0 이상에서만 지원되며 이전 버전에는 영향을주지 않습니다.
class MainApp extends Component {
render() {
return (
<View style={styles.container}>
<View elevation={5} style={styles.buttonContainer}>
<Text style={styles.textStyle}>Shadow Applied</Text>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#FFFFFF'
},
textStyle: {
color: '#FFFFFF'
},
buttonContainer: {
backgroundColor: '#2E9298',
borderRadius: 10,
padding: 10,
shadowColor: '#000000',
shadowOffset: {
width: 0,
height: 3
},
shadowRadius: 5,
shadowOpacity: 1.0
}
})
iPhone에서 테스트되었습니다.
편집하다
@ James의 의견. 감사.
참고 : Android 사용자의 경우 backgroundColor가 중요 합니다. View를 다른 요소의 컨테이너로 사용하고 있었는데 배경색을 지정할 때까지 그림자를 얻을 수 없었습니다.
RN Android에서 그림자를 구현하려면 고도를 사용하십시오. 고도 소품 # 27 추가
<View elevation={5}> </View>
viewStyle : {
backgroundColor: '#F8F8F8',
justifyContent: 'center',
alignItems: 'center',
height: 60,
paddingTop: 15,
shadowColor: '#000',
shadowOffset: { width: 0, height: 2 },
shadowOpacity: 0.2,
marginBottom: 10,
elevation: 2,
position: 'relative'
},
marginBottom 사용 : 10
View에 고도 소품을 제공해야합니다.
<View elevation={5} style={styles.container}>
<Text>Hello World !</Text>
</View>
스타일은 다음과 같이 추가 할 수 있습니다.
const styles = StyleSheet.create({
container:{
padding:20,
backgroundColor:'#d9d9d9',
shadowColor: "#000000",
shadowOpacity: 0.8,
shadowRadius: 2,
shadowOffset: {
height: 1,
width: 1
}
},
})
panel: {
// ios
backgroundColor: '#03A9F4',
alignItems: 'center',
shadowOffset: {width: 0, height: 13},
shadowOpacity: 0.3,
shadowRadius: 6,
// android (Android +5.0)
elevation: 3,
}
또는 android 용 react-native-shadow 를 사용할 수 있습니다.
여백에 관한 모든 것
이것은 Android에서 작동하지만 ios에서는 테스트하지 않았습니다.
import React, { PureComponent } from 'react'
import PropTypes from 'prop-types'
import { View, Platform } from 'react-native'
import EStyleSheet from 'react-native-extended-stylesheet'
const styles = EStyleSheet.create({
wrapper: {
margin: '-1.4rem'
},
shadow: {
padding: '1.4rem',
margin: '1.4rem',
borderRadius: 4,
borderWidth: 0,
borderColor: 'transparent',
...Platform.select({
ios: {
shadowColor: 'rgba(0,0,0, 0.4)',
shadowOffset: { height: 1, width: 1 },
shadowOpacity: 0.7,
shadowRadius: '1.4rem'
},
android: {
elevation: '1.4rem'
}
})
},
container: {
padding: 10,
margin: '-1.4rem',
borderRadius: 4,
borderWidth: 0,
borderColor: '#Fff',
backgroundColor: '#fff'
}
})
class ShadowWrapper extends PureComponent {
static propTypes = {
children: PropTypes.oneOfType([
PropTypes.element,
PropTypes.node,
PropTypes.arrayOf(PropTypes.element)
]).isRequired
}
render () {
return (
View style={styles.wrapper}
View style={styles.shadow}
View style={styles.container}
{this.props.children}
View
View
View
)
}
}
export default ShadowWrapper
스타일 구성 요소 별
const StyledView = styled.View`
border-width: 1;
border-radius: 2;
border-color: #ddd;
border-bottom-width: 0;
shadow-color: #000;
shadow-offset: {width: 0, height: 2};
shadow-opacity: 0.8;
shadow-radius: 2;
elevation: 1;
`
또는 스타일
const styles = StyleSheet.create({
containerStyle: {
borderWidth: 1,
borderRadius: 2,
borderColor: '#ddd',
borderBottomWidth: 0,
shadowColor: '#000',
shadowOffset: { width: 0, height: 2 },
shadowOpacity: 0.8,
shadowRadius: 2,
elevation: 1,
marginLeft: 5,
marginRight: 5,
marginTop: 10,
}
})
참조 URL : https://stackoverflow.com/questions/29323544/how-do-i-render-a-shadow
'Development Tip' 카테고리의 다른 글
while (1)의 목적; (0) | 2021.01.09 |
---|---|
How to change Button Title Alignment in Swift? (0) | 2021.01.09 |
캐시를 사용하지 않는 Curl 명령 (0) | 2021.01.09 |
온라인 PHP IDE가 있습니까? (0) | 2021.01.09 |
Kotlin에 Java Lombok 접근자가 표시되지 않나요? (0) | 2021.01.08 |