React Native IOS 状态栏背景

问题描述 投票:0回答:4

因为在 IOS 上不会应用将 backgroundColor 属性应用于 StatusBar 组件。我需要设置 SafeAreaView 的背景颜色以获得我想要的效果,它工作正常,但在 iPhone X 上它会在屏幕底部具有相同的颜色。我该如何解决这个问题?

ios react-native statusbar
4个回答
14
投票

React-Native 在 iOS 平台上不支持 StatusBar 的背景颜色更改,但在 Android 平台上则可以(https://facebook.github.io/react-native/docs/statusbar#backgroundcolor)。我为你的问题写了一个解决方法。您可以放心使用

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

const STATUS_BAR_HEIGHT = Platform.OS === 'ios' ? 20 : StatusBar.currentHeight;

function StatusBarPlaceHolder() {
    return (
        <View style={{
            width: "100%",
            height: STATUS_BAR_HEIGHT,
            backgroundColor: "blue"
        }}>
            <StatusBar
                barStyle="light-content"
            />
        </View>
    );
}

class App extends Component {
    render() {
        return (
            <View style={{flex: 1}}>
                <StatusBarPlaceHolder/>
                ...YourContent
            </View>
        );
    }
}

export default App;

对于安全区域视图:

import React, {Component} from "react";
import {StyleSheet, StatusBar, View, Platform} from "react-native";
import SafeAreaView from "react-native-safe-area-view";
//You can also use react-navigation package for SafeAreaView with forceInset.

const STATUS_BAR_HEIGHT = Platform.OS === 'ios' ? 20 : StatusBar.currentHeight;

function StatusBarPlaceHolder() {
    return (
        <View style={{
            width: "100%",
            height: STATUS_BAR_HEIGHT,
            backgroundColor: "blue"
        }}>
            <StatusBar
                barStyle="light-content"
            />
        </View>
    );
}

class App extends Component {
    render() {
        return (
            <SafeAreaView style={{flex:1}}
                forceInset={{top: 'never'}}>
                <StatusBarPlaceHolder/>
                ...YourContent
            </SafeAreaView>
        );
    }
}

export default App;

2
投票

支持iPhone X

除了 @sdkcy 的答案之外,对于 iPhone X,STATUS_BAR_HEIGHT 不能为 20。

我通过安装以下库解决了这个问题:

https://www.npmjs.com/package/react-native-status-bar-height

安装

npm install --save react-native-status-bar-height

导入

import { getStatusBarHeight } from 'react-native-status-bar-height';

并像这样更新 STATUS_BAR_HEIGHT:

const STATUS_BAR_HEIGHT = Platform.OS === 'ios' ? getStatusBarHeight() : 0;

最后,我还将 Android 的高度更改为 0,因为它影响了导航栏的高度,但如果它适合您,您可以保持不变。

希望这有帮助。


0
投票

iPhone X 使用44pt高状态栏

const STATUS_BAR_HEIGHT = Platform.OS === 'ios' ? 44:StatusBar.currentHeight;

参考这些备忘单


0
投票

iOS 不像 Android 那样支持 React-Native 中的

<StatusBar>
组件。实现
<SafeAreaView>
组件会以某种方式降低 iOS 中原始状态栏的视图。我搜索了许多解决方案,其中大多数都指导使用自定义组件或使用库。这是我脑海中出现的一个快速解决方案,并且效果很好。就在
<SafeAreaView>
将整个 UI 包装在 JSX 片段(如
<></>
)下之前。

我给出了我的代码示例,以便您可以更好地理解。 我已经在 iPhone 11 Pro Max 和 iPhone 14 上测试过,效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.