предисловие
Эффект тени является очень распространенным требованием в приложении, и его можно напрямую передать в css3.box-shadow
Реализация свойства, конец RN для iOS, также может быть реализована с помощью следующего кода, аналогичного
//只支持iOS端
shadowColor: '#999', //设置阴影色
shadowOffset:{width:0,height:0}, //设置阴影偏移,该值会设置整个阴影的偏移,width可以看做x,height可以看做y,x向右为正,y向下为正
shadowOpacity: 1,
shadowRadius: 1.5, //设置阴影模糊半径,该值设置整个阴影的半径,默认的效果就是View的四周都有阴影
Но приведенный выше код не поддерживает Android, на стороне Android вы можете пройтиelevation
свойства для реализации
//该值只在android5.0(包含)以上的机型才支持
//无法指定阴影的颜色以及偏移,只能设置阴影的高度
//阴影效果主要在底部,其它三面也有一个层次感,跟ios四面阴影效果不一样
elevation:1.5,
Однако стили представления этих двух платформ сильно различаются. Если вы не возражаете, вы можете напрямую объединить свойства двух платформ и ссылаться на них там, где вам нужно их использовать:
viewShadow:{
//该属性只支持>=android 5.0
elevation:1.5,
shadowColor:gColors.color999,
shadowOffset:{width:0,height:0},
shadowOpacity: 1,
shadowRadius: 1.5,
}
<View style={[{},Styles.viewShadow]}>
</View>
Эффект: (Разница между двумя концами все еще очень велика)
iOS:
android:
В частности, вы можете просмотреть:stackoverflow.com/questions/4…
выбор библиотеки
Библиотека использует библиотеку svgreact-native-svgНарисованная тень, поэтому эффект обоих концов одинаков, использование следующее:
const shadowOpt = {
width:100,
height:100,
color:"#000",
border:2,
radius:3,
opacity:0.2,
x:0,
y:3,
style:{marginVertical:5}
}
...
render = () => {
return (
<View>
<Shadow setting={shadowOpt}>
<View style={{width:100,height:100}}/>
</Shadow>
</View>
)
}
Из приведенного выше кода мы можем узнать, что самым большим недостатком этой библиотеки является то,ширина и высота должны быть установлены, ширина можно сказать, но высота очень хлопотна для макета адаптивной высоты, вы должны установить фиксированную высоту, я просто хочу добавить тень, и дайте мне рассчитать высоту
Библиотека iOS использует теневой атрибут, поставляемый с RN, а на стороне Android используется компонент CardView в библиотеке поддержки, поэтому на стороне Android необходимо интегрировать собственный код, использование выглядит следующим образом:
import CardView from 'react-native-cardview'
<CardView
cardElevation={2}
cardMaxElevation={2}
cornerRadius={5}>
<Text>
Elevation 0
</Text>
</CardView>
Уведомление:
- 1. Лучше всего установить фоновое значение для CardView, иначе будет выдано много следующих предупреждений
YellowBox.js:71 (ADVICE) View #257 of type RCTView has a shadow set but cannot calculate shadow efficiently. Consider setting a background color to fix this, or apply the shadow to a more specific component.
- 2. Если вам нужны закругленные углы, установите
cornerRadius
Вот и все, вам не нужно устанавливать дочерний элементborderRaduis
Не заботьтесь о ширине и высоте, отлично, давайте посмотрим на беговой эффект:
iOS:
android:
Ну, это все же немного другое, но это лучше, чем использование свойств
В заключение
|Имя|Собственные зависимости|Плюсы|Минусы|
|--|--|--|--|--|
|RN поставляется со свойствами|Нет|Нет необходимости интегрировать какую-либо родную библиотеку|1. Между двумя концами существует большая разница.
2. Не поддерживает установку цвета
3.Android поддерживает толькоelevation
атрибут|
|react-native-shadow|зависимостьreact-native-svg| 1. Эффект на обоих концах почти одинаковый
2. Поддерживает множество атрибутов, таких как цвет | 1. Вы должны установить ширину и высоту |
|react-native-cardview| Android-сторона библиотеки является родной | 1. По сравнению с методом 1, она поддерживает больше атрибутов | 1. Между двумя концами все еще есть различия (лучше, чем метод 1)
|
-
1. Если вам не нужно иметь одинаковый эффект на обоих концах, и вам не нужно поддерживать устройства Android до android5 (сейчас редко), вы можете напрямую использовать атрибуты, которые идут с RN
-
2. Если вам нужно иметь одинаковый эффект на обоих концах или вам нужно установить цвет тени, вы можете использовать толькоreact-native-shadow, недостатком является то, что должны быть установлены фиксированные высота и ширина (библиотека зависит отreact-native-svg)
-
3. Затем выберитеreact-native-cardview, эффект относительно близок, и оба являются родными эффектами iOS/Android.
ps: если вам нужен файл определения ts для react-native-cardview, вы можете скопировать его напрямуюpull61Файл ts внутри, хотя пулл был слит, он не выпущен в npm (по состоянию на 16.12.2019)
разное
Статистика, совместное использование и авторизация RN Umeng Umeng
полное обновление android глючит
Навигационная библиотека карт RN Gaode
RN реализует очистку локального кеша
RN реализует настраиваемое горячее обновление с отправкой кода