0

使用 googleland 中的技术,我将 iOS 状态栏文本设置为白色。除了将文本设置为黑色的 iPhone XR 之外,这工作正常。

我发现处理这个问题的技术都是 Swift 和 Objective C 相关的。Xamarin.Forms 的技术是什么?

在 plist 我有

  • 状态栏样式 = 白色
  • 查看基于控制器的状态栏外观 = 否

基于这个相关问题,iPhone XR 上的状态栏文本颜色不同,我试过了

  • 查看基于控制器的状态栏外观 = 是

但这会将所有 iOS 设备状态栏变为黑色,包括 XR。然后它谈到了一些我不知道 Xamarin 中的类比的 Swift 代码。

基于这个相关问题, https://forums.xamarin.com/discussion/89840/change-status-bar-color-on-ios

它很接近,但它改变了栏的背景颜色。我在 statusBar 对象上找不到任何关于文本颜色的属性。

基于这个相关问题, https://forums.xamarin.com/discussion/17922/navigationpage-statusbar-color

使用 SetStatusBarStyle 也不影响 XR。

注意:我没有使用 NavigationPage

4

3 回答 3

0

带有 NavigationController 的 Swift 4.2 解决方案

第一步:

打开您的 info.plist 并插入一个名为“查看基于控制器的状态栏外观”UIViewControllerBasedStatusBarAppearanceYES的新键,让每个 VC 使用自己的状态属性。

第二步

在每个 VC 中,重写 preferredStatusBarStyle 属性,如下所示:

override var preferredStatusBarStyle : UIStatusBarStyle { return .lightContent //.default for black style }

最后一步

覆盖自定义 NavigationController 类中的 preferredStatusBarStyle 属性:

`类导航控制器:UINavigationController {

覆盖 var preferredStatusBarStyle : UIStatusBarStyle {

if let topVC = viewControllers.last {
    //return the status property of each VC, look at step 2
    return topVC.preferredStatusBarStyle  
}

return .default

} `

于 2019-06-07T08:31:32.193 回答
0

你很接近。看来您需要为此使用自定义渲染器。在 ViewController 中,您将 PreferredStatusBarStyle 函数覆盖此处显示的三个枚举中的任何一个,如下所示:

public override UIStatusBarStyle PreferredStatusBarStyle()
{
    return UIStatusBarStyle.LightContent;
}
于 2019-06-06T20:14:28.790 回答
0

我知道我们现在不应该使用UIStatusBarStyle。但它确实适用于我的 XR 模拟器上的 iOS 12.2。我在 info.plist 中添加了密钥:

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

状态栏的文本变为白色: 在此处输入图像描述

使用代码更改颜色也可以正常工作:

UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.LightContent;

您可以利用它来动态调整状态栏样式。

但是,为您指定的页面创建自定义渲染器是另一种选择。首先,UIViewControllerBasedStatusBarAppearance在 info.plist 中将 设置为 true。

那么页面渲染器可能是这样的:

[assembly: ExportRenderer(typeof(MainPage), typeof(CustomPageRenderer))]
namespace App.iOS
{
    public class CustomPageRenderer : PageRenderer
    {
        public override UIStatusBarStyle PreferredStatusBarStyle()
        {
            return UIStatusBarStyle.LightContent;
        }
    }
}

MainPage是表单上的内容页面类。我将它设置为应用程序的MainPage.

于 2019-06-11T09:44:08.680 回答