[英]Setting IsVisible property of FlyOutItem to False results in app crash in iOS 14.5
以下是 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 中的 FlyouItem 之一。 Shell 共有 7 项。 除了图标、路线和模板外,它们是相同的。 最后 2 项未固定。 因此,它们不受ShowAuthorizedRoutes的约束。 因此,需要切换 5 个项目的可见性。
登录成功后,一切都按预期进行。 显示所有项目。 但是,一旦在注销时将ShowAuthorizedRoutes设置为 FALSE,该应用程序就会在 iOS 14.5 中尝试隐藏受保护的项目时崩溃。
应用中心注册以下崩溃报告。
“尝试从第 0 部分删除第 5 行,更新前仅包含 2 行”
看起来 Shell object 正在尝试删除已删除的项目。
如果它是 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;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.