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

在Xamarin.Forms iOS设备上设置TimePicker的英文AM/PM标识

强制Xamarin.Forms TimePicker在iOS上显示英文AM/PM标识

要解决iOS上TimePicker的AM/PM随地区变化的问题,你需要通过自定义iOS渲染器来强制指定区域为英文,具体步骤如下:

  1. 在共享项目中创建自定义TimePicker类
using Xamarin.Forms;

namespace YourAppName
{
    // 自定义TimePicker,用于区分原生控件
    public class EnglishTimePicker : TimePicker
    {
    }
}
  1. 在iOS项目中添加自定义渲染器
    在iOS项目的任意目录下创建渲染器类,代码如下:
using Foundation;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
using YourAppName;

// 注册渲染器,关联自定义控件和iOS端实现
[assembly: ExportRenderer(typeof(EnglishTimePicker), typeof(EnglishTimePickerRenderer))]
namespace YourAppName.iOS
{
    public class EnglishTimePickerRenderer : TimePickerRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<TimePicker> e)
        {
            base.OnElementChanged(e);

            if (Control == null) return;

            // 获取底层的UIDatePicker并强制设置英文区域
            if (Control.InputView is UIDatePicker datePicker)
            {
                // en_US_POSIX是不受系统语言影响的固定英文区域
                datePicker.Locale = new NSLocale("en_US_POSIX");
            }

            // 同时设置控件自身的区域,保证显示文本的AM/PM为英文
            Control.Locale = new NSLocale("en_US_POSIX");
        }
    }
}
  1. 在XAML中替换为自定义控件
    将原来的TimePicker替换为我们创建的EnglishTimePicker,并添加命名空间引用:
<!-- 在页面根元素添加命名空间引用,替换成你的项目命名空间 -->
xmlns:local="clr-namespace:YourAppName"

<!-- 使用自定义控件 -->
<local:EnglishTimePicker BackgroundColor="Red"
                         Format="hh:mm tt"
                         Time="{Binding StartTime}"
                         HorizontalOptions="CenterAndExpand"/>

说明

  • en_US_POSIX是苹果推荐用于固定格式解析/显示的区域标识,不会随用户的系统语言或地区设置改变,能确保AM/PM始终显示为英文。
  • 此方案仅针对iOS端,Android端默认不会有AM/PM语言随地区变化的问题,无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:52:55