You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maui中Controls.UserDialogs.Maui的Toast消息iOS端颜色异常求助

解决Controls.UserDialogs.Maui iOS Toast颜色失效问题及替代方案

一、针对Controls.UserDialogs.Maui的临时修复方案

由于iOS原生系统Toast本身限制自定义样式,该包在iOS端未做适配,可通过平台特定自定义实现解决:

步骤1:iOS项目中编写原生Toast逻辑

在iOS项目创建自定义Toast服务类,用UIView模拟可自定义颜色的Toast:

using UIKit;
using Foundation;

internal static class PlatformToastHelper
{
    public static void ShowStyledToast(string message, UIColor bgColor, UIColor textColor, double duration = 2.0)
    {
        var toastView = new UIView
        {
            BackgroundColor = bgColor,
            Layer = { CornerRadius = 12 },
            TranslatesAutoresizingMaskIntoConstraints = false
        };

        var messageLabel = new UILabel
        {
            Text = message,
            TextColor = textColor,
            Font = UIFont.SystemFontOfSize(14),
            TextAlignment = UITextAlignment.Center,
            Lines = 0,
            TranslatesAutoresizingMaskIntoConstraints = false
        };

        toastView.AddSubview(messageLabel);

        var keyWindow = UIApplication.SharedApplication.KeyWindow;
        keyWindow?.AddSubview(toastView);

        // 设置布局约束
        NSLayoutConstraint.ActivateConstraints(new[]
        {
            toastView.LeadingAnchor.ConstraintGreaterThanOrEqualTo(keyWindow.LeadingAnchor, 20),
            toastView.TrailingAnchor.ConstraintLessThanOrEqualTo(keyWindow.TrailingAnchor, 20),
            toastView.BottomAnchor.ConstraintEqualTo(keyWindow.SafeAreaLayoutGuide.BottomAnchor, -20),
            messageLabel.LeadingAnchor.ConstraintEqualTo(toastView.LeadingAnchor, 16),
            messageLabel.TrailingAnchor.ConstraintEqualTo(toastView.TrailingAnchor, -16),
            messageLabel.TopAnchor.ConstraintEqualTo(toastView.TopAnchor, 12),
            messageLabel.BottomAnchor.ConstraintEqualTo(toastView.BottomAnchor, -12)
        });

        keyWindow?.LayoutIfNeeded();

        // 显示/隐藏动画
        toastView.Alpha = 0;
        UIView.Animate(0.2, () => toastView.Alpha = 1, () =>
        {
            UIView.Animate(duration, 0.2, UIViewAnimationOptions.CurveEaseOut, 
                () => toastView.Alpha = 0, 
                () => toastView.RemoveFromSuperview());
        });
    }
}

步骤2:通过依赖服务调用

在MAUI共享项目定义接口:

public interface ICustomToastService
{
    void ShowToast(string message, Color backgroundColor, Color textColor);
}

在iOS项目实现该接口并注册依赖:

[assembly: Dependency(typeof(CustomToastServiceImpl))]
namespace YourAppNamespace.iOS
{
    public class CustomToastServiceImpl : ICustomToastService
    {
        public void ShowToast(string message, Color backgroundColor, Color textColor)
        {
            var uiBgColor = UIColor.FromRGBA(
                (nfloat)backgroundColor.Red, 
                (nfloat)backgroundColor.Green, 
                (nfloat)backgroundColor.Blue, 
                (nfloat)backgroundColor.Alpha);
            
            var uiTextColor = UIColor.FromRGBA(
                (nfloat)textColor.Red, 
                (nfloat)textColor.Green, 
                (nfloat)textColor.Blue, 
                (nfloat)textColor.Alpha);

            PlatformToastHelper.ShowStyledToast(message, uiBgColor, uiTextColor);
        }
    }
}

最后在业务代码中调用:

DependencyService.Get<ICustomToastService>().ShowToast("测试消息", Colors.DarkBlue, Colors.White);

二、推荐替代包

如果不想自定义实现,可选择以下成熟的MAUI Toast库:

  • CommunityToolkit.Maui
    微软官方维护的工具包,Toast组件支持跨平台自定义样式,使用简单:
using CommunityToolkit.Maui.Alerts;
using CommunityToolkit.Maui.Core;

var customToast = Toast.Make(
    "自定义颜色提示", 
    ToastDuration.Short, 
    fontSize: 14);

customToast.BackgroundColor = Colors.DarkGreen;
customToast.TextColor = Colors.White;
await customToast.Show();
  • MauiToast
    专注于MAUI的Toast库,支持更多自定义选项(位置、图标、颜色等),跨平台表现一致。

内容的提问来源于stack exchange,提问作者Mark Vermulst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 23:23:11