无法在TabbedPage中更改状态栏文本颜色

时间:2018-03-14 14:12:32

标签: ios xamarin xamarin.forms xamarin.ios

我已将状态栏样式设置为Light。当我的MainPage打开时,状态栏文本变为黑色。

我的MainPage是TabbedPage。当我将MainPage设置为具有ContentPage的页面时,状态栏文本将按预期变为白色。

的Info.plist

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

AppDelegate.cs

app.SetStatusBarStyle(UIStatusBarStyle.LightContent, true);
UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.LightContent;

App.xaml.cs

MainPage = new Views.MainPage();

4 个答案:

答案 0 :(得分:0)

如果要将整个应用中的状态栏颜色更改为白色,则需要更改info.plist中的View controller-based status bar appearance属性,默认情况下会在视图控制器级别设置状态栏样式,而不是应用程序级别。

info.plist

所以,如果这是你在info.plist中的内容,它应该是正确的,你可能需要在下次部署之前删除应用程序并清理/重建

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

但是,如果您需要更改每Page的状态栏颜色,则可能需要编写自定义页面渲染器。

答案 1 :(得分:0)

首先,状态栏与导航栏不同。

definitions

可以在theme中设置应用程序的App1.Droid.Resources.values.style.xml(即颜色)(适用于Android)。

在这里,您需要了解哪个属性定位styles.xml文件中的哪个值。 file

styles.xml中的

This链接包含有关样式化应用程序颜色时的最佳实践的大量信息。

此图显示哪个属性将更改哪个值: tags

答案 2 :(得分:0)

最简单的解决方案:通过statusBar获取keyValue

  1. 删除您在info.plist

  2. 中添加的键值
  3. FinishedLaunching

    中添加以下代码
    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        global::Xamarin.Forms.Forms.Init();
        LoadApplication(new App());
    
        UIView statusBar = UIApplication.SharedApplication.ValueForKey(new NSString("statusBarWindow")).ValueForKey(new NSString("statusBar")) as UIView;
        statusBar.BackgroundColor = UIColor.White;
    
        return base.FinishedLaunching(app, options);
    }
    
  4. enter image description here

答案 3 :(得分:0)

问题的原因是我在NavigationPages中附上了子页面。

MainPage.xaml中:

<TabbedPage ...>
    <NavigationPage><x:Arguments><local:Page1/></x:Arguments></NavigationPage>
    <NavigationPage><x:Arguments><local:Page2/></x:Arguments></NavigationPage>
</TabbedPage>

当我删除了导航页面时,状态栏文本变为白色:

<TabbedPage ...>
    <local:Page1/>
    <local:Page2/>
</TabbedPage>