如何使用 Xamarin 在 iOS 中更改 NavigationBar 的标题字距调整值

How to Change Title Kerning Value of NavigationBar in iOS using Xamarin

我正在尝试调整 NavigationBar 中标题文本的字距。我已经将自定义 UIStringAttributes 分配给 NavigationBar 标题。设置字体和文本颜色似乎工作正常,但是当我输入字距调整时,无论我输入什么值,都没有任何反应。

public void SetTitleFont (string fontName, float fontSize, Color foregroundColor)
{
    var TitleAttr = new UIStringAttributes {
        ForegroundColor = foregroundColor.ToUIColor(),
        Font = UIFont.FromName (fontName, fontSize),
        KerningAdjustment = 50
    }; 

    this.NavigationController.NavigationBar.TitleTextAttributes = TitleAttr;
}

想通了。

对我有用的是创建一个新的 UILabel,设置 UILabel 的属性,然后将 TitleView 设置为 UILabel。

// We will grab the actual title of the Page further down.    
string viewTitle = string.Empty;

UINavigationItem navItem = new UINavigationItem();

if (this.NavigationController != null)
{
    if (this.NavigationController.VisibleViewController != null)
    {
        if (this.NavigationController.VisibleViewController.NavigationItem != null)
        {
            navItem = this.NavigationController.VisibleViewController.NavigationItem;

            // Grab the title of the Page you are on.
            if (navItem.Title != null)
            {
                viewTitle = this.NavigationController.VisibleViewController.NavigationItem.Title;
            }
        }
    }
}

// We do not want to set an arbitrary size for the UILabel.
// Otherwise, positioning it will be very difficult.
// The StringSize function will set the size of the UILabel to the absolute
// minimum size of whatever string you specify - given the correct
// parameters (font and fontSize).
CGSize titleSize = viewTitle.StringSize(UIFont.FromName (fontName, size));

// Create the new title UILabel. Make sure to set the Bounds!
pageTitleView = new UILabel {
    Bounds = new CGRect (0, 0, titleSize.Width, titleSize.Height),
    BackgroundColor = UIColor.FromRGBA(0, 0, 0, 0)
};

var titleAttributes = new NSAttributedString (viewTitle,
    new UIStringAttributes () {
    ForegroundColor =  foregroundColor.ToUIColor(),
    Font = UIFont.FromName (fontName, size),
    KerningAdjustment = 1.1f
});

// Apply the new attributes to the UILabel and center the text.
pageTitleView.AttributedText = titleAttributes;
pageTitleView.TextAlignment = UITextAlignment.Center;

// Set the TitleView to the new UILabel.
navItem.TitleView = pageTitleView;

希望对您有所帮助!