XR状态栏文字保持黑色,但iPhone 8或iPad不显示

时间:2019-06-06 19:35:34

标签: ios xamarin.forms xamarin.ios statusbar iphone-xr

使用googleland中的技术,我将iOS状态栏文本设置为白色。除iPhone XR可以将文本设置为黑色外,其他方法均能正常工作。

我找到的用于处理此问题的技术都是Swift和Objective C相关的。 Xamarin.Forms的技术是什么?

我在plist中

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

基于这个相关问题Status Bar Text Color on iPhone XR is different,我尝试了

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

但这会将所有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

3 个答案:

答案 0 :(得分:0)

您非常接近。看来您需要为此使用自定义渲染器。在ViewController中,您将对以下三个枚举shown here中的任何一个重写PreferredStatusBarStyle函数:

public override UIStatusBarStyle PreferredStatusBarStyle()
{
    return UIStatusBarStyle.LightContent;
}

答案 1 :(得分:0)

带有NavigationController的Swift 4.2解决方案

第一步:

打开您的info.plist,然后将名为“基于控制器的视图的状态栏外观” UIViewControllerBasedStatusBarAppearance 的新密钥插入 YES 以允许每个VC都使用自己的状态属性。

第二步

在每个VC中,覆盖这样的preferredStatusBarStyle属性:

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

最后一步

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

`class NavigationController: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

} `

答案 2 :(得分:0)

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

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

状态栏的文本变为白色: enter image description here

使用代码更改颜色也可以:

UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.LightContent;

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

不过,为您指定的页面创建custom renderer是另一种选择。首先,在info.plist中将UIViewControllerBasedStatusBarAppearance设置为true。

然后页面渲染器可能像:

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

MainPage是表单上的内容页面类。然后将其设置为应用的MainPage