2017-06-21 332 views
1

我正在嘗試向react-navigation導航器添加疊加層(例如,顯示錯誤彈出窗口/多士爐/調試按鈕等)。向反應導航導航器添加疊加層

但是我有一個問題:

當我把反應導航在視圖,頂部覆蓋的反應要麼導航不顯示或以某種方式被扭曲。

import React, { Component } from 'react'; 
import { Text, View } from 'react-native'; 
import { StackNavigator } from 'react-navigation'; 

class HomeScreen extends React.Component { 
    static navigationOptions = { 
    title: 'Welcome', 
    }; 
    render() { 
    return <Text>Hello, Navigation!</Text>; 
    } 
} 

const SimpleApp = StackNavigator({ 
    Home: { screen: HomeScreen }, 
}); 

class SimpleAppWithOverlay extends React.Component { 
    render() { 
    return( 
     <View> 
     <View style={{position: "absolute", backgroundColor:"transparent", margin:30}}> 
      <Text>Some Overlay</Text> 
     </View> 
     <SimpleApp/> 
     </View>); 
    } 
} 

這裏有兩個片段展示了我的意思在現場編輯:

您可以在第二個示例中看到疊加層出現,但底層應用只是不可見。

可以工作嗎?怎麼樣?

+0

我知道愚蠢的問題,但你的覆蓋背景是透明的,你是否將它定位在基本圖層的上方:'position','absolute''? –

+0

@MilanGulyas謝謝 - 愚蠢的問題仍然有幫助! :)我*是*使用'position:absolute',但* not *'backgroundColor:transparent'。不過,我試過https://snack.expo.io/HyzBWWdQW和反應導航器仍然沒有顯示。所以如果我不做一些愚蠢的行爲(我的第一個假設),也許它正在做一些聰明的事情 - 在這種情況下,問題是 - 我們怎麼聰明呢? –

+0

你可以用上面的相關代碼編輯上面的問題嗎?沒有這一點很難猜測。 –

回答

2

改變了你的代碼有點

import React, { Component } from 'react'; 
import { AppRegistry, Text, View } from 'react-native'; 
import { StackNavigator } from 'react-navigation'; 

class HomeScreen extends React.Component { 
    static navigationOptions = { 
    title: 'Welcome', 
    }; 
    render() { 
    return (
     <View style={{ flex: 1 }}> 
     <Text>Hello, Navigation!</Text> 
     </View> 
    ) 
    } 
} 

class SimpleAppWithOverlay extends React.Component { 
    render() { 
    return (
     <View style={{flex: 1}}> 
     <SimpleApp /> 
     <View style={{ position: "absolute", backgroundColor: 'rgba(255,0,0,0.4)', top: 0, bottom: 0, left: 0, right: 0 }}> 
      <Text style={{ paddingTop: 8 }}>Some Overlay</Text> 
     </View> 
     </View> 
    ); 
    } 
} 

const SimpleApp = StackNavigator({ 
    Home: { screen: HomeScreen }, 
}); 

AppRegistry.registerComponent('overlayapp',() => SimpleAppWithOverlay); 

你應該注意到,position: 'absolute'只父是絕對不喜歡絕對在CSS定位相對。

如果你想疊加在navigationBar上面,你可以做一些類似於navigationOptions.headerRight的事情。

+0

是否可以覆蓋導航器本身或僅覆蓋屏幕? –

+0

在我的真實例子中,我有很多路由,而不僅僅是一個,我想在頂層有一個覆蓋層(例如,在開發模式下有一個浮動調試按鈕)。 –

+0

對不起,我的問題可能不清楚...... –