如何在React Native中设置iOS状态栏背景颜色?

时间:2016-09-02 16:47:43

标签: ios react-native ios7-statusbar

在本机iOS本机代码中是否有一个地方可以修改以设置iOS状态栏backgroundColor? RCTRootView.m?

react native StatusBar component仅支持Android的 backgroundColor

iOS operating system seems to allow setting status bar backgroundColor

我的目标是使颜色更深的状态栏颜色。 Example

9 个答案:

答案 0 :(得分:136)

iOS没有状态栏bg的概念。以下是您如何以跨平台的方式实现这一目标:

import React, {
  Component,
} from 'react';
import {
  AppRegistry,
  StyleSheet,
  View,
  StatusBar,
  Platform,
} from 'react-native';

const MyStatusBar = ({backgroundColor, ...props}) => (
  <View style={[styles.statusBar, { backgroundColor }]}>
    <StatusBar translucent backgroundColor={backgroundColor} {...props} />
  </View>
);

class DarkTheme extends Component {
  render() {
    return (
      <View style={styles.container}>
        <MyStatusBar backgroundColor="#5E8D48" barStyle="light-content" />
        <View style={styles.appBar} />
        <View style={styles.content} />
      </View>
    );
  }
}

const STATUSBAR_HEIGHT = Platform.OS === 'ios' ? 20 : StatusBar.currentHeight;
const APPBAR_HEIGHT = Platform.OS === 'ios' ? 44 : 56;

const styles = StyleSheet.create({
  container: {
    flex: 1,
  },
  statusBar: {
    height: STATUSBAR_HEIGHT,
  },
  appBar: {
    backgroundColor:'#79B45D',
    height: APPBAR_HEIGHT,
  },
  content: {
    flex: 1,
    backgroundColor: '#33373B',
  },
});

AppRegistry.registerComponent('App', () => DarkTheme);

{{3}}

答案 1 :(得分:33)

import { StatusBar } from 'react-native';添加到app.js的顶部,然后将StatusBar.setBarStyle('light-content', true);添加为render()的第一行,将状态栏文字/图标更改为白色。< / p>

其他颜色选项为'default''dark-content'

有关详细信息,请参阅https://facebook.github.io/react-native/docs/statusbar.html

除此之外:不,你必须按照你提供的链接。

答案 2 :(得分:2)

如果您使用的是react-native-navigation,则需要:

1-)将其添加到info.plist文件中: <key>UIViewControllerBasedStatusBarAppearance</key> <string>YES</string>

2-)在render()函数的第一行,例如: render(){ this.props.navigator.setStyle({ statusBarTextColorScheme: 'light' }); return ( <Login navigator={this.props.navigator}></Login> ); }

此示例将您的状态栏转换为浅色文本/按钮/图标颜色。 enter image description here

答案 3 :(得分:2)

 render() {
        let { email, password, isLoading } = this.state
        return (
            <View style={{ flex: 1, }}>
                <StatusBar
                    translucent
                    barStyle="light-content"
                    //  backgroundColor="rgba(0, 0, 0, 0.251)"
                    backgroundColor='magenta'
                 />
            </View>
            )
        }

enter image description here

答案 4 :(得分:0)

在react-native中设置iOS和Android状态栏backgroundColor

    import React, { Component } from 'react';
    import { Platform, StyleSheet, View, StatusBar } from 'react-native';
    import Constants from 'expo-constants';


    class Statusbar extends Component {

        render() {
            return (
                <View style={styles.StatusBar}>
                    <StatusBar translucent barStyle="light-content" />
                </View>
            );
        }
    }

    const styles = StyleSheet.create({
        StatusBar: {
            height: Constants.statusBarHeight,
            backgroundColor: 'rgba(22,7,92,1)'
        }
    });

    export default Statusbar;

答案 5 :(得分:0)

添加到根视图。 (如果有,则退出SafeAreaView)

{Platform.OS === 'ios' &&
 <View style={{
     width: "100%",
     height: 100, // For all devices, even X, XS Max
     position: 'absolute',
     top: 0,
     left: 0,
     backgroundColor: "red"}}
/>}
// App screen
...

答案 6 :(得分:0)

import {SafeAreaConsumer} from 'react-native-safe-area-context';

<SafeAreaConsumer>
{(insets)=>(
<View style={{flex:1}}>
<View style={{height:insets.top ,backgroundColor :"black"}}/>
<StatusBar barStyle="light-content"/>
<View style={{flex:1}}>
  <Text>My Text</Text>
</View>
</View>
)}
</SafeAreaConsumer>

答案 7 :(得分:0)

您需要对其进行自定义。
如果您使用 reac-native

中的 SafeAreaView,否则 StatusBar 不是 ios 屏幕布局的一部分

改为使用 react-native-safe-area-context 并对其进行自定义。

看到这个snack

enter image description here

答案 8 :(得分:0)

我能够更改 iOS 上状态栏的背景颜色,但更新了 backgroundColor 组件的 SafeAreaView 属性。

<SafeAreaView style={{backgroundColor: 'blue'}}>
   // App Content
</SafeAreaView>