Xamarin Forms - 自定义渲染器以在 ios 中居中页面标题

Xamarin Forms - custom renderer to centre page title in ios

在 Xamarin Forms 中,我试图左对齐页面标题,我知道我需要一个自定义渲染器,但我不确定在执行以下代码后去哪里。

这甚至可能不正确,但我想我需要创建一个页面渲染器并在那里进行对齐?

[assembly: ExportRenderer(typeof(Page), typeof(gl_mobile_app.iOS.TitleExRenderer))]
namespace gl_mobile_app.iOS
{
    public class TitleExRenderer : Xamarin.Forms.Platform.iOS.PageRenderer
    {
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);
            // align title
        }
    }
}

Apple 在 default UINavigationBar 中未正式支持此功能。

您可以尝试一个技巧:在 TopItem.LeftBarButtonItem 中放置一个标签并且不要使用默认标题 属性

在您的自定义渲染器中类似这样的内容:

var label = new UILabel();
//this is the variable containing the title you need to pass it as a bindable property
label.Text = title; 
label.TextAlignment = UITextAlignment.Left;
label.SizeToFit();
NavigationController.NavigationBar.TopItem.LeftBarButtonItem = new UIBarButtonItem(label);

更新

您也可以阅读这篇优秀的博客post: http://www.xamboy.com/2017/12/06/navigation-bar-customization-in-xamarin-forms/

更新 2

你可以尝试抓取默认的页面标题,在你左边的位置使用它,然后处理它,像这样:

var label = new UILabel();
//get the default title
label.Text =  NavigationController.NavigationBar.TopItem.Title; 
label.TextAlignment = UITextAlignment.Left;
label.SizeToFit();

//empty the default title (try with empty string or null if empty doesnt work)
NavigationController.NavigationBar.TopItem.Title = "";    

NavigationController.NavigationBar.TopItem.LeftBarButtonItem = new UIBarButtonItem(label);

这是未经测试的,如果可行请告诉我:)