繁体   English   中英

将 FlyOutItem 的 IsVisible 属性设置为 False 会导致 iOS 14.5 中的应用程序崩溃

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM