如何调整Xamarin Forms中NavigationPage自带返回按钮的尺寸
Xamarin Forms共享层未提供直接修改默认返回箭头尺寸的公开属性,你可以通过以下两种方案实现需求:
方案1:替换自定义返回图标(实现成本最低)
该方案可以完全自定义返回图标的样式、尺寸,适配你的UI要求,操作步骤如下:
- 准备好符合你尺寸要求的返回图标资源,按平台适配规则存放:
- 安卓:将不同分辨率的图标放入
Resources/drawable-xxx对应目录 - iOS:将不同倍率的图标放入
Resources目录,命名遵循xxx@2x.png、xxx@3x.png规则
- 安卓:将不同分辨率的图标放入
- 单页面设置:在需要修改的页面构造函数中添加以下代码:
// 隐藏默认返回文字(可选) NavigationPage.SetBackButtonTitle(this, ""); // 替换自定义返回图标 NavigationPage.SetIcon(this, ImageSource.FromFile("custom_back.png"));
- 全局生效:可以创建公共
BasePage类,所有页面继承BasePage统一设置,无需每个页面单独编写代码。
方案2:自定义渲染器修改默认返回箭头尺寸
不需要替换图标,直接通过原生渲染层调整默认返回箭头的大小,代码示例如下:
安卓端实现
using Android.Content; using Android.Util; using AndroidX.AppCompat.Widget; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; [assembly: ExportRenderer(typeof(NavigationPage), typeof(YourNamespace.Droid.CustomNavigationRenderer))] namespace YourNamespace.Droid { public class CustomNavigationRenderer : NavigationPageRenderer { public CustomNavigationRenderer(Context context) : base(context) { } protected override void OnLayout(bool changed, int l, int t, int r, int b) { base.OnLayout(changed, l, t, r, b); var toolbar = FindViewById<Toolbar>(Resource.Id.toolbar); if (toolbar?.NavigationIcon != null) { // 自定义尺寸,这里设置为48dp,可根据需求修改 int iconSize = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, 48, Context.Resources.DisplayMetrics); toolbar.NavigationIcon.SetBounds(0, 0, iconSize, iconSize); } } } }
iOS端实现
using CoreGraphics; using UIKit; using Xamarin.Forms; using Xamarin.Forms.Platform.iOS; [assembly: ExportRenderer(typeof(NavigationPage), typeof(YourNamespace.iOS.CustomNavigationRenderer))] namespace YourNamespace.iOS { public class CustomNavigationRenderer : NavigationRenderer { public override void ViewWillAppear(bool animated) { base.ViewWillAppear(animated); // 调整默认返回图标尺寸,这里设置为30*30,可根据需求修改 var backIcon = UIImage.GetSystemImage("chevron.left") .ImageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate) .Scale(new CGSize(30, 30)); NavigationBar.BackIndicatorImage = backIcon; NavigationBar.BackIndicatorTransitionMaskImage = backIcon; } } }
注意事项
- 上述自定义渲染器代码中的
YourNamespace需要替换为你项目对应的命名空间 - 你原有的
NavigationPage样式中BarTextColor、BarBackgroundColor属性不受影响,可以正常生效 - 如果需要同时修改图标样式和尺寸,优先选择方案1;如果仅需要调整默认箭头的大小,选择方案2即可。
内容的提问来源于stack exchange,提问作者Hari
相关产品推荐
相关产品推荐

