iOS 上的大号页标题

此 iOS 平台特定功能可用于在 NavigationPage 的导航栏上将页标题显示为大标题,适用于使用 iOS 11 或更高版本的设备。 大标题左对齐,使用较大的字体,并在用户开始滚动内容时转换为标准标题,从而能有效地利用屏幕空间。 但是在横向模式下,标题将返回导航栏的中心以优化内容布局。 其使用方式是,在 XAML 中将 NavigationPage.PrefersLargeTitles 附加属性设置为 boolean 值:

<NavigationPage xmlns="http://xamarin.com/schemas/2014/forms"
                xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
                ...
                ios:NavigationPage.PrefersLargeTitles="true">
  ...
</NavigationPage>

也可以使用 Fluent API 从 C# 中使用它:

using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.iOSSpecific;
...

var navigationPage = new Xamarin.Forms.NavigationPage(new iOSLargeTitlePageCS());
navigationPage.On<iOS>().SetPrefersLargeTitles(true);

NavigationPage.On<iOS> 方法指定此平台特定功能将仅在 iOS 上运行。 Xamarin.Forms.PlatformConfiguration.iOSSpecific 命名空间中的 NavigationPage.SetPrefersLargeTitle 方法控制是否启用大标题。

如果在 NavigationPage 上启用了大标题,则导航堆栈中的所有页面都将显示大标题。 将 Page.LargeTitleDisplay 附加属性设置为 LargeTitleDisplayMode 枚举的值即可在页面上重写此行为:

<ContentPage ...
             xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
             Title="Large Title"
             ios:Page.LargeTitleDisplay="Never">
  ...
</ContentPage>

也可以使用 Fluent API 从 C# 中重写页面行为:

using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.iOSSpecific;
...

public class iOSLargeTitlePageCS : ContentPage
{
    public iOSLargeTitlePageCS(ICommand restore)
    {
        On<iOS>().SetLargeTitleDisplay(LargeTitleDisplayMode.Never);
        ...
    }
    ...
}

Page.On<iOS> 方法指定此平台特定仅在 iOS 上运行。 Xamarin.Forms.PlatformConfiguration.iOSSpecific 命名空间中的 Page.SetLargeTitleDisplay 方法控制 Page 上的大标题行为,其中 LargeTitleDisplayMode 枚举提供三个可能的值:

  • Always – 强制导航栏和字号使用大号格式。
  • Automatic – 使用与导航堆栈中上一项相同的样式(大或小)。
  • Never – 强制使用常规的小号格式导航栏。

还可以使用 SetLargeTitleDisplay 方法,通过调用 LargeTitleDisplay 方法切换枚举值,返回当前 LargeTitleDisplayMode

switch (On<iOS>().LargeTitleDisplay())
{
    case LargeTitleDisplayMode.Always:
        On<iOS>().SetLargeTitleDisplay(LargeTitleDisplayMode.Automatic);
        break;
    case LargeTitleDisplayMode.Automatic:
        On<iOS>().SetLargeTitleDisplay(LargeTitleDisplayMode.Never);
        break;
    case LargeTitleDisplayMode.Never:
        On<iOS>().SetLargeTitleDisplay(LargeTitleDisplayMode.Always);
        break;
}

结果是将指定的 LargeTitleDisplayMode 应用到 Page,它控制大标题行为:

特定于平台的模糊效果