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);
这是未经测试的,如果可行请告诉我:)
在 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);
这是未经测试的,如果可行请告诉我:)