iOS 上的大号页标题

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

<NavigationPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
                xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                xmlns:ios="clr-namespace:Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;assembly=Microsoft.Maui.Controls"
                ...
                ios:NavigationPage.PrefersLargeTitles="true">
  ...
</NavigationPage>

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

using Microsoft.Maui.Controls.PlatformConfiguration;
using Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;
...

var navigationPage = new Microsoft.Maui.Controls.NavigationPage(new iOSLargeTitlePageCode());
navigationPage.On<iOS>().SetPrefersLargeTitles(true);

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

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

<ContentPage ...
             xmlns:ios="clr-namespace:Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;assembly=Microsoft.Maui.Controls"
             Title="Large Title"
             ios:Page.LargeTitleDisplay="Never">
  ...
</ContentPage>

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

using Microsoft.Maui.Controls.PlatformConfiguration;
using Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;
...

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

Page.On<iOS> 方法指定此平台特定仅在 iOS 上运行。 Microsoft.Maui.Controls.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,它控制大标题行为:

Page title as a large title.