Xamarin.Forms:如何使iOS状态栏背景不透明黑色?

时间:2018-11-26 15:37:56

标签: ios xamarin xamarin.forms xamarin.ios

我在一个没有导航栏(NavigationPage.SetHasNavigationBar(this, false);)的NavigationPage中有一个带有WebView的ContentPage。

问题:iOS上的状态栏始终是透明的,并且可以通过它看到内容。我想避免这种情况,我想要一个带有白色文本的不透明/纯黑色状态栏。

我考虑过在状态栏下方仅设置一个彩色矩形,高度为20磅,但是如何确保它具有适用于iPhone X型手机的正确尺寸(44磅)呢? (iPhone XS Max,iPhone XR)。

  • NavigationPage.BarBackgroundColorBarTextColor在隐藏导航栏时似乎没有什么不同。
  • UIStatusBarStyleBlackOpaque已过时。
  • 设置UIStatusBarStyleUIViewControllerBasedStatusBarAppearance == false可以更改 文字的颜色,而不是背景的颜色:背景始终 透明的。
  • 在其他Stack Overflow问题(或与此相关的其他任何地方)中,我都没有找到答案。

3 个答案:

答案 0 :(得分:0)

在Xcode中,我无需使用代码即可实现此目的。首先,请确保您正在使用导航控制器。然后,在该控制器中单击顶部导航栏,然后将“样式”更改为“黑色”,将“栏色调”更改为“黑色”,然后将“色调”(靠近底部)更改为“白色”。然后它将自动按预期填充内容。

enter image description here

答案 1 :(得分:0)

如果只想使此页面不在Xamarin.Forms中显示导航栏,则

添加此页面,而不是导航页面的根。

我建议当您推送到此WebView页面时,不要使用导航页面,只需这样做。

 Navigation.PushModalAsync(new NextPage());

不使用Navigation.PushAsync(new NextPage());

更多信息:

如果Xamarin.Forms的方法不起作用,则可以尝试使用本机ios方法来实现。

使用UIStatusBarStyle设置UIBarStyleBlack

使用navigationBar.translucent设置NO

半透明: 一个布尔值,指示导航栏是否为半透明(是)(是)(否)。

答案 2 :(得分:0)

在状态栏下方创建彩色矩形是正确的。

在页面的自定义页面渲染器(这里称为MyPage)中,创建一个视图/子视图(UIView),该视图/子视图的黑色背景覆盖状态栏(即位于其下方,提供的背景)。据我了解,自iOS 7起,状态栏从没有背景,并且始终是半透明的。

using MyApp;
using MyApp.iOS;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

[assembly:ExportRenderer (typeof(MyPage), typeof(MyPageRenderer))]
namespace MyApp.iOS
{
    public class MyPageRenderer : PageRenderer
    {
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);

            if (e.OldElement != null || Element == null)
            {
                return;
            }

            UIView statusBarCoverView = new UIView(UIApplication.SharedApplication.StatusBarFrame);
            statusBarCoverView.BackgroundColor = UIColor.Black;
            View.AddSubview(statusBarCoverView);
        }
    }
}

即使在设置了BarBackgroundColorBarTextColor的情况下,即使先前的背景是明亮的,Xamarin.Forms NavigationPage也会坚持将状​​态栏文本设置为黑色,即使先前的背景为黑色。

到目前为止,我发现唯一更改此方法的方法是将UIViewControllerBasedStatusBarAppearance中的false设置为Info.plist,这将导致状态栏文本在整体上始终为白色应用:

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

不理想,但是我还没有发现如何设置它。 UIApplication.SharedApplication.StatusBarStylePreferredStatusBarStyleSetNeedsStatusBarAppearanceUpdate()似乎无效。我怀疑这是因为页面是NavigationPage控制器的子控制器。