我旋转一个TouchableOpacity
(没有任何动画(,如下所示:
transform: [
{ rotate: '45deg' }
]
它在iOS上运行良好,但在Android上崩溃(请参阅下面的测试版本(:
java.lang.ClassCastException: java.lang.String 不能强制转换为 java.lang.Double
我不能在rotate
上放一个双精度,因为我得到了一个不变的违规。我能做什么?
环境:
- 操作系统: macOS High Sierra 10.13.5
- 节点:7.10.0
- 纱线:1.9.4
- NPM:4.2.0
- 守望者:4.9.0
- Xcode:Xcode 9.4.1 Build 版本 9F2000
- 安卓工作室: 3.2 AI-181.5540.7.32.5014246
软件包:(想要 => 已安装(
反应: 16.3.1- => 16.3.1 反应原生: 0.55.1
- => 0.55.1
测试于:
- iOS 12(在设备和模拟器上运行良好(
- 安卓 7.0 和 8.1(设备和模拟器(
在 Github 上直接引用此问题
有条件地将弧度与Platform
一起使用,它们将被转换为双精度而不会出错:
import {Platform} from 'react-native'
…
transform: [
{rotate: (Platform.OS === 'ios') ? '45deg' : (3.14159/4)+'rad'}
]
这将正常显示。
但是,顺便说一下,旋转的可触摸不透明度会失去其可触摸行为。
要解决此问题,请使用子视图将旋转应用于:
<TouchableOpacity onPress={…}>
<View style={styles.yourRotation}>
…
</View>
</TouchableOpacity>
魔术答案您可以旋转视图而不是可触摸不透明度。分别更改相同的宽度和高度
<TouchableOpacity style={{ height: 100, width: 20 }} >
<View style={{ height: 20, width: 100, transform: [{ rotate: '90deg' }] }}>
<Text>PRESS</Text>
</View>
</TouchableOpacity>