以下是FlyoutItem的一个片段,如果用户登录,则需要在其中显示项目。如果登录过程成功,登录过程将ShowAuthorizedRoutes设置为true。
<FlyoutItem Title="Benefits Summary" IsVisible="{Binding ShowAuthorizedRoutes}">
<ShellContent Route="BenefitsSummary" ContentTemplate="{DataTemplate local:BenefitsSummaryPage}" />
<FlyoutItem.FlyoutIcon>
<FontImageSource FontFamily="FontAwesome5154Solid"
Glyph="{x:Static fontAwesome:FontAwesomeIcons.DollarSign}"
Color="{x:StaticResource Secondary}"
Size="Medium">
</FontImageSource>
</FlyoutItem.FlyoutIcon>
</FlyoutItem>
上面的片段显示了Shell中的一个FlyouItems。外壳中总共有7个项目。除了图标、路线和模板之外,它们是相同的。最后两个项目没有固定。因此,它们不绑定到ShowAuthorizedRoutes。因此,需要切换5个项目的可见性。
登录成功后,一切都会按预期进行。显示所有项目。然而,一旦ShowAuthorizedRoutes在注销时设置为FALSE,该应用程序在iOS 14.5中试图隐藏安全项目时就会崩溃。
应用程序中心注册以下崩溃报告。
";尝试从在"更新"之前仅包含2行的部分0中删除行5
Shell对象似乎正在尝试删除已删除的项目。
如果是iOS 15或更高版本,则可以正常工作。它也适用于Android(任何版本(。
有什么建议可以在iOS 14上解决这个问题吗?谢谢你的帮助!
如果试图将逻辑转移到代码后面,会发生什么?
尝试以下代码,将其放入AppShell
中。
if (ShowAuthorizedRoutes)
{
foreach(ShellItem item in this.Items)
{
item.IsVisible = true;
}
}
else
{
foreach (ShellItem item in this.Items)
{
if (item.Title == "A" || item.Title == "B" ....)
{
item.IsVisible = false;
}
}
}