2017-01-28 8 views
2

私はここに、navbarにロゴを入れる必要があるアプリがあります。シーンレイアウトをオーバーフローさせる必要があります。イオスでうまく動作しますが、アンドロイドでは動作していないようです。コードを画像の下に置きます。あなたが見ることができるように、私はEStyleSheetを使って%を使用させます。アンドロイドでリアクションネイティブのAndroidで要素のオーバーフローが隠されています

IOS

enter image description here

アンドロイド

enter image description here

import React from 'react'; 
import { Scene, Router } from 'react-native-router-flux'; 
import EStyleSheet from 'react-native-extended-stylesheet'; 
import { View, Platform } from 'react-native'; 
import { SmallLogo } from './components'; 
import { checkColor } from './helpers'; 
import { 
    HomeScreen, 
    ImagePickerScreen, 
    WaitingResponseScreen, 
    ResultsScreen 
} from './modules'; 
import Colors from '../constants/Colors'; 

const styles = EStyleSheet.create({ 
    navStyle: { 
    flex: 1, 
    marginTop: '5%', 
    alignItems: 'center', 
    }, 
    logoCircle: { 
    backgroundColor: '$whiteColor', 
    height: 60, 
    width: 60, 
    borderRadius: 30, 
    justifyContent: 'center', 
    alignItems: 'center' 
    } 
}); 

const logoNav = result => (
    <View style={styles.navStyle}> 
    <View style={styles.logoCircle}> 
     <SmallLogo color={checkColor(result)} /> 
    </View> 
    </View> 
); 

const pdTop = Platform.OS === 'ios' ? 64 : 54; 

export default() => (
    <Router 
    sceneStyle={{ paddingTop: pdTop }} 
    navigationBarStyle={{ backgroundColor: Colors.greenColor }} 
    renderTitle={props => { 
     if (props.result) { 
     return logoNav(props.result); 
     } 
     return logoNav(null); 
    }} 
    backButtonTextStyle={{ color: Colors.whiteColor }} 
    leftButtonIconStyle={{ tintColor: Colors.whiteColor }} 
    > 
    <Scene 
     key="home" 
     component={HomeScreen} 
    /> 
    <Scene 
     key="imagesPicker" 
     hideBackImage 
     component={ImagePickerScreen} 
    /> 
    <Scene 
     key="waitingResponse" 
     backTitle="Back" 
     component={WaitingResponseScreen} 
    /> 
    <Scene 
     key="results" 
     backTitle="Back" 
     initial 
     component={ResultsScreen} 
    /> 
    </Router> 
); 

答えて

9

あなたは非常に迷惑なことであるコンポーネントの境界線の外側を、描くことができません。私は通常、回避策として次のことを行います:元のコンテナとオーバーフローデータの両方をラップする新しい<View>にコンポーネントをラップします。ビューbackgroundColor'transparent'に設定し、それが不可視になり、pointerEvents'box-none'になり、イベントが子に伝播されるようにします。ビューの大きさは、前のトップコンポーネント+オーバフロー(あなたの場合は高さだけ)のものでなければなりませんが、これはFlexboxでうまくいくと思う状況もあります。

2

martinarroyoの回答にフォローアップ。 残念ながら、彼は正しいですが、現時点では反応のネイティブ0.41(まだ安定していません)が、overflow: visibleのアンドロイドサポートを追加することを約束しています。これはすばらしいニュースですので、回避策はそれほど楽しいものではありません...

+0

ああ、これはとても良いニュースです! – martinarroyo

関連する問題