iOS 15 更新后 iOS 平台中 Xamarin.forms 的导航栏颜色更改问题

Navigation bar colour change issue in Xamarin.forms in iOS platform after iOS 15 update

在我开发的应用程序中,屏幕底部的导航栏会根据用户选择的主题在黑色和白色之间变换颜色。在我将软件更新为 iOS 15 之前,它一直运行良好。现在,即使用户将其更改为深色模式,导航栏仍然保持白色(应该变成黑色)。知道为什么会这样吗?此问题仅存在于 iOS 平台。

更新 2:当前版本(在撰写本文时为 5.0.0.2244)应该可以解决此问题

更新:此问题的修复已合并,应尽快发布!

这是一个我们正在跟踪的已知问题 here。那里以自定义渲染器的形式提到了一个解决方法,我将把它粘贴在这里,但这是特定于 Shell 的。但它也可能会给您一些关于如何在常规组件上使用它的提示。

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

[assembly: ExportRenderer(typeof(APPNAME.AppShell), typeof(APPNAME.iOS.Renderers.CustomShellRenderer))]
namespace APPNAME.iOS.Renderers
{

    public class CustomShellRenderer : ShellRenderer
    {
        protected override IShellSectionRenderer CreateShellSectionRenderer(ShellSection shellSection)
        {
            var renderer = base.CreateShellSectionRenderer(shellSection);
            
            if (renderer != null)
            {
                if (renderer is ShellSectionRenderer shellRenderer)
                {
                    
    
                    var appearance = new UINavigationBarAppearance();
                    appearance.ConfigureWithOpaqueBackground();
                    appearance.BackgroundColor = new UIColor(red: 0.86f, green: 0.24f, blue: 0.00f, alpha: 1.00f);
                    
                    appearance.TitleTextAttributes = new UIStringAttributes() { ForegroundColor = UIColor.White};
                    
              
                    shellRenderer.NavigationBar.Translucent = false;
                    shellRenderer.NavigationBar.StandardAppearance = appearance;
                    shellRenderer.NavigationBar.ScrollEdgeAppearance = shellRenderer.NavigationBar.StandardAppearance;
                    
                }
            }

            return renderer;
        }

        protected override IShellItemRenderer CreateShellItemRenderer(ShellItem item)
        {
            var renderer = base.CreateShellItemRenderer(item);
            
            if (renderer != null)
            {
                if (renderer is ShellItemRenderer shellItemRenderer)
                {
                    var appearance = new UITabBarAppearance();
                    
                    appearance.ConfigureWithOpaqueBackground();

                    shellItemRenderer.TabBar.Translucent = false;
                    shellItemRenderer.TabBar.StandardAppearance = appearance;
               
                }
                

            }

            return renderer;
        }
        
    }
}

这个问题似乎是由在 iOS 15 上针对 Xcode 13/运行 编译引起的。链接问题中的其他人提到降级他们的 Xcode让它对他们有用。

TL;DR:我们正在研究应该很快发布的修复程序:)

您好,问题已在预发布的 Xamarin Form 添加源 Nuget 中修复以访问它 https://aka.ms/forms-prs/index.json

然后就可以安装Xamarin Form 5.0.0.7649包解决问题了。

要了解更多信息,请访问 GitHub 中项目页面中的错误: https://github.com/xamarin/Xamarin.Forms/issues/14505