IOS 12.02中的react-native可触摸不透明度单击问题

时间:2019-06-26 10:44:10

标签: react-native

TouchableOpacity要求我们在IOS 12.2中单击两次。这些问题不在以前的IOS 12.1版本中。 每当单击TouchableOpacity时,似乎都会注册单击,但不会触发onPress事件。在本机版本0.52中会发生此问题。仅在IOS中会发生此问题,而在android中则不会。

代码段

 <FlatList
                                scrollEnabled={false}
                                data={this.props.menuData[this.props.toutIndex].Menu}
                                keyExtractor={(data, index) => index}
                                renderItem={({ item , index}) => {
                                    //alert(categoryLinks.menu_id+""+data.menu_id);
                                    //alert(JSON.stringify(data));
                                    return (
                                        <TouchableOpacity onPress={()=>this.itemDetailsPage(item)} > 
                                        <View>
                                        <CardItem  onPress={()=>this.itemDetailsPage(item)} style={[styles.menuSubCategoryCardItem, {marginLeft:0, borderLeftWidth: 6, borderLeftColor: item.itemCount ? '#00CDBE' : '#FFFFFF'}]}>
                                            <View style={{flex:2,marginLeft:"0%"}}>
                                                <View style={styles.menuItemImageOuterContainer}>

                                                    <View style={styles.menuItemImageInnerContainer}>

                                                        <ImageLoad
                                                            style={styles.menuItemImage}
                                                            isShowActivity={false}
                                                            borderRadius={10}
                                                            source={{ uri: item.menu_photo }}
                                                        />

                                                        {item.ratable == 'true' ?
                                                                                <View style={[styles.menuItemRatingImage,{backgroundColor:item.overall_rating==0 ? 'rgb(166,166,166)' : item.rating_color}]}>
                                                                <Text style={styles.menuItemRatingImageText}>{ item.overall_rating>0 ? parseFloat(item.overall_rating).toFixed(this.state.rating_decimal_places) : "-" }</Text>
                                                            </View>
                                                                            :null}
                                                    </View>

                                                    <View style={styles.menuItemNameContainer}>
                                                                        <View style={{width:'100%',}}>

                                                                        <Text numberOfLines={2} style={[styles.textHeadingMenuItem,{fontSize: item.menu_name.length>50 ? 53/3.82 : 63/3.82,paddingLeft:"2%"}]}>
                                                                                {this.Capitalize(item.menu_name)}
                                                                            </Text>

                                                                        </View>
                                                                        <View style={{width:'130%',}}>
                                                            <Text numberOfLines={3} note style={[styles.textMenuItem,{paddingLeft:"2%"}]}>
                                                                {item.menu_description}
                                                            </Text>
                                                                        </View>
                                                        {
                                                            item.friend_review_count > 0 ?
                                                            <View style={{flexDirection:'row',marginLeft:"2%",alignItems:'center'}}>
                                                                <Image style={styles.userIconBelowMenuItemText} source={require("../../../assets/home/blueUser.png")}>
                                                                </Image>
                                                                <Text numberOfLines={1} style={styles.MenuItemFriendsRatedText}>
                                                                    {item.friend_review_count} friends have rated this.
                                                                </Text>
                                                            </View>
                                                            :
                                                            null
                                                        }
                                                    </View>
                                                </View>
                                            </View>
                                            <Right>
                                                  <View style={styles.menuItemPriceOuterContainer}>
                                                      <Text style={[styles.textHeadingMenuItemPrice,{paddingTop:"5%"}]}>
                                                        {this.state.currency} {CommonFunc.numberWithCommas(
                                                                parseInt(item.menu_price)
                                                                    .toFixed(categoryLinks.state.decimal_places)
                                                                )
                                                            }
                                                      </Text>
                                                  </View>
                                                  <View style={styles.menuItemPlusButtonContainer}>
                                                    {  item.itemCount == undefined || item.itemCount == 0?
                                                        <TouchableOpacity style={styles.menuItemPlusButton}
                                                        onPress={() => this.displaySelector(item.menu_price, item.Menu_Options, this.props.toutIndex, null, index, 1)}
                                                        onLongPress={() => this.displaySelector(item.menu_price, item.Menu_Options, this.props.toutIndex, null, index, 1, 1)}
                                                        rejectResponderTermination
                                                        >
                                                            <Image style={[styles.menuItemPlusButtonImage,{resizeMethod:'resize'}]} source={require("../../../assets/order/Add.png")} />
                                                        </TouchableOpacity>
                                                        :
                                                        <View style={styles.menuItemSelectorContainer}>
                                                            <Button transparent onPress={() => this.displaySelector(item.menu_price, item.Menu_Options, this.props.toutIndex, null, index, -1)} style={{paddingVertical:10, paddingLeft:2}}>
                                                                <Image source={require('../../../assets/order/decrease.png')}
                                                              style={[styles.menuItemSelectorDecreaseIcon,{resizeMethod:'resize'}]}/>
                                                            </Button>
                                                            <Button transparent>
                                                                <Text style={styles.menuItemSelectorCountText}>
                                                                    {item.itemCount}
                                                                </Text>
                                                            </Button>
                                                            <Button transparent onPress={() => this.displaySelector(item.menu_price, item.Menu_Options, this.props.toutIndex, null, index, 1)}
                                                            onLongPress={() => this.displaySelector(item.menu_price, item.Menu_Options, this.props.toutIndex, null, index, 1, 1)}
                                                            style={{paddingVertical:10, paddingRight:2}}
                                                            >
                                                                <Image source={require('../../../assets/order/increase.png')}
                                                              style={[styles.menuItemSelectorDecreaseIcon,{resizeMethod:'resize'}]}/>
                                                            </Button>
                                                        </View>
                                                    }
                                                  </View>
                                            </Right>
                                        </CardItem>
                                        </View>
                                        </TouchableOpacity>
                                    );
                                }}
                            />
                        </View>
                    </View>
                }

4 个答案:

答案 0 :(得分:1)

使用

keyboardShouldPersistTaps='always' 

在TouchableOpacity的父级组件上,以便子级可触摸项保持点击。

例如eg1

<Flatlist keyboardShouldPersistTaps='always'>

 <TouchableOpacity/>

</Flatlist>

eg2:

<TouchableOpacity keyboardShouldPersistTaps='always'>

 <TouchableOpacity></TouchableOpacity>

</TouchableOpacity>

答案 1 :(得分:1)

这很可能是反应组件之间的冲突。虽然更新到最新的react也许可以解决问题,但是我建议您尝试删除每个组件,然后查看它是否有效。

您是否有机会使用PanResponder?这也可能造成冲突。谢谢,祝你好运。

答案 2 :(得分:0)

尝试react-native 0.55.4是一个稳定的版本,我通常在我的个人项目中使用。 并尝试将图像包装在这样的视图中\

<TouchableOpacity>
     <View>
         <Image />
     </View>
</TouchableOpacity>

答案 3 :(得分:0)

您在<TouchableOpacity><Card>中有2个onPress嵌套函数,它们都调用相同的项,请删除<Card>组件的onPress函数,它将大部分正常工作