首先說一下我的ReactNative的版本是0.43.4,Android6.0(華為榮耀6Plus),以下遇到的坑,在最新版的RN中沒測試是否還存在,不過按照Facebook的團隊習(xí)慣,我估計還是沒修復(fù)的。
一、Textinput
1、android下相同高度的輸入框高度比ios下高。
android平臺上,在padding沒指定時,通過Toggle Inspector可以發(fā)現(xiàn)TextInput的padding明明是0(見下圖1),但實際并非如此,paddingVertical必須指定為0。


2、onContentSizeChange方法在初始化時會執(zhí)行一次,后面就再也不執(zhí)行,這樣要實現(xiàn)輸入框的自動高度就無法實現(xiàn),只能通過在onChange方法中去實現(xiàn)
onTextShouldChange(event) {
? ? lettext= event.nativeEvent.text;
? ? //TODO:ANDROID上onContentSizeChange不生效,需要通過onChange來
? ? if(Platform.OS=='android'){
? ? ? ? this.onContentSizeChange(event);
? ? }
}
onContentSizeChange(event) {
? ? let hei=Math.max(event.nativeEvent.contentSize.height,22*scale);
? ? this.setState({inputHei:Math.min(hei,136*scale)});
}
二、攝像頭與相冊讀取
android6.0及以上版本,在android/app/src/AndroidManifest.xml配置權(quán)限已不起作用,必須在代碼中做權(quán)限判斷
示例:
import{
? ? Platform,
? ? PermissionsAndroid
} from'react-native';
....
requestPermission(pname){
? ? if(Platform.OS=='ios'){
? ? ? ? return true;
? ? }
? ? try{
? ? ? ? let message='',title='';
? ? ? ? if(pname==PermissionsAndroid.PERMISSIONS.CAMERA){
? ? ? ? ? ? title= Di18n.tr('訪問相機授權(quán)');
? ? ? ? ? ? message= Di18n.tr('需要允許使用您的相機才可拍照');
? ? ? ? }
? ? ? ? const ?granted=awaitPermissionsAndroid.request(pname,{title,message});
? ? ? ? if(granted===PermissionsAndroid.RESULTS.GRANTED) {
? ? ? ? ? ? return true;
? ? ? ? }else{
? ? ? ? ? ? return false;
? ? ? ? }
? ? }catch(err) {
? ? ? ? console.log('requestPermission err',err);
? ? ? ? return false;
? ? }
}
componentDidMount(){
? ? this.requestPermission(this.permission).then((result)=>{
? ? ? ? if(result){
? ? ? ? ? ? //有權(quán)使用了
? ? ? ? }else{
? ? ? ? ? ? Toast.show(Di18n.tr('您沒有授權(quán),無法使用相機'));
? ? ? ? }
? ? });
}
三、View的overflow:hidden和borderRadius同用時,hold不住里面子component,所以當要實現(xiàn)圖片圓角時,只能對View里面的子Component圖片加borderRadius屬性。
BUG網(wǎng)址描述:
https://github.com/facebook/react-native/issues/3198
https://github.com/facebook/react-native/issues/8885