Rotated TouchableOpacity падает на Android при выборе - PullRequest
0 голосов
/ 11 октября 2018

Я поворачиваю TouchableOpacity ( без анимации ) следующим образом:

transform: [
  { rotate: '45deg' }
]

Он отлично работает на iOS, но вылетает на Android (, см. Проверенные версии ниже):

java.lang.ClassCastException: java.lang.String не может быть приведена к java.lang. Double

Я не могу поставить 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 Версия сборки 9F2000
  • Android Studio: 3.2 AI-181.5540.7.32.5014246

Пакеты: (хотел => установлен)

  • реагировать: 16.3.1 => 16.3.1
  • Reaction-native: 0.55.1 => 0.55.1

Проверено на:

  • iOS 12 (отлично работала на устройстве и симуляторе)
  • Android 7.0 и 8.1 (как устройство, так и эмулятор)

Прямая ссылка на эту проблему на Github

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Волшебный ответ Вы можете вращать View вместо TouchableOpacity.Измените одинаковую ширину и высоту отдельно

<TouchableOpacity  style={{  height: 100, width: 20 }} >
                <View style={{  height: 20, width: 100, transform: [{ rotate: '90deg' }] }}>
                       <Text>PRESS</Text>
                </View>
</TouchableOpacity>
0 голосов
/ 11 октября 2018

Условно используйте радианы с Platform, они будут преобразованы в удвоенные значения без ошибок:

import {Platform} from 'react-native'
…
transform: [
  {rotate: (Platform.OS === 'ios') ? '45deg' : (3.14159/4)+'rad'}
]

Это будет отображаться нормально.

Но этот повернутый TouchableOpacity, кстати, теряет свое сенсорное поведение.

Чтобы исправить это, используйте дочерний вид, чтобы применить свое вращение к:

<TouchableOpacity onPress={…}>
  <View style={styles.yourRotation}>
     …
  </View>
</TouchableOpacity>
...