Xamarin.forms: [错误] Shell应用程序在向后导航时闪烁

创建于 2019-11-20  ·  58评论  ·  资料来源: xamarin/Xamarin.Forms

描述

导航动画闪烁,在Shell应用程序中导航时会短暂显示黑屏。

重现步骤

导航回去。

预期行为

不要忽悠

实际行为

忽隐忽现。

基本信息

  • 有问题的版本:
  • 最后一个已知的好版本:
  • IDE:VS 2019 16.3.9
  • 平台目标框架:

    • iOS:不适用

    • Android:9.0

    • UWP:不适用

  • Android支持库版本:
  • Nuget软件包:
  • 受影响的设备:Samsung Galaxy S8,S10

屏幕截图

问题的慢动作视频: https

复制链接

shell 3 in-progress Android bug

最有用的评论

我用Xaminals样品测试了小坚果

https://github.com/xamarin/Xamarin.Forms/issues/6294

有了这个小细节,闪烁就不再发生

所有58条评论

一个临时的解决方法,如果进行覆盖,没有动画就不会闪烁!

protected override bool OnBackButtonPressed() {Current.Navigation.PopAsync(false); return true;}

嘿@ z07713! 感谢您的举报,并添加了视频以及解决方法! 干得好😄

您是否有机会将一个小型的复制项目放在一起,以排除这是由其他任何代码引起的,而不仅仅是导航吗?

另外,您是否在iOS上尝试过此操作并看到了相同的东西? 还是没有在iOS上尝试过?

谢谢!

嘿@ z07713! 感谢您的举报,并添加了视频以及解决方法! 干得好😄

您是否有机会将一个小型的复制项目放在一起,以排除这是由其他任何代码引起的,而不仅仅是导航吗?

另外,您是否在iOS上尝试过此操作并看到了相同的东西? 还是没有在iOS上尝试过?

谢谢!

@jfversluis ,谢谢您的答复,这是您要求的代表: https : //drive.google.com/open?id=1WkGh6QwTOP380gX4RrRsksSGBoJNWeuc

另外,我还没有在IOS上尝试过,也没有能力这样做,因为我没有Mac。

太好了,谢谢@ z07713

肯定会看到这种情况,谢谢。

可能值得注意的是,解决方法
protected override bool OnBackButtonPressed() {Current.Navigation.PopAsync(false); return true;}
仅当应用于AppShell.xaml背后的代码中时才起作用,而放在单独的页面上时则不起作用。 我认为这与7072有关

作为工作场所,覆盖ShellSectionOnPopAsync ShellSection以禁用动画可能会更有针对性。

public class CustomShellSection : ShellSection
{
    protected override Task<Page> OnPopAsync(bool animated)
    {
        return base.OnPopAsync(false); // ignore the parameter
    }
}

@jfversluis对我来说,这似乎在iOS(13.3)上正常工作。

禁用动画不是我们的选择,我们只是在完成发布。 我们将不得不回滚到4.3,这很糟糕,因为它将重新打开一些主要在shell和轮播中的错误。

我们可能不得不禁用某些功能,然后在没有这些功能的情况下发布它们,鉴于我们使用它们多久了,这令人遗憾。

除了禁用动画之外,还有其他解决方法吗?

有机会在1月16日之前解决吗? 太棒了。 谢谢。

请注意,PopModal动画没有问题。

很抱歉听到@jonx。 即使我们要在1月16日之前修复它,也不太可能成为我们在此之前发布的NuGet的一部分。 如果这阻碍了您的发行,那么我不会押注该选项。 对于那个很抱歉。

@jfversluis可以,我知道,谢谢您的评论。 我们只需要延迟发布。
@ z07713有一种方法可以让您再次共享您的样本,我无法再访问您的链接。 我想看看这是否真的是同样的问题,因为对我来说,我可以短暂地看到应用程序的另一个屏幕而不是黑屏(这是在向导的上下文中;当我弹出当前页面时,我会短暂看到向导的第一页)。 谢谢。
@jfversluis您对4.4中的哪些更改引入此问题有一个想法吗? 我想看看是否有一种临时解决此问题的方法。 谢谢。

我降级到4.3.991250,实际上我仍然有问题,只是不那么明显(因为它更快-我想是更快)。 如果@ z07713可以分享他的示例,我将做更多测试...

@jonx ,您可以前往: https : //drive.google.com/open?id = 19apVlQS0TafFeBT16aCfzvtvCwcweVgS

另外,它还安装了4.3.0.991211表格:/

我也有这个问题。 我试过把线:
受保护的覆盖布尔OnBackButtonPressed(){Current.Navigation.PopAsync(false); 返回true; }
在我的appShell.xaml.cs中,并且闪烁仍然存在。 如果有人可以帮助我了解解决方法,那将非常棒!

如果您想在动画中使用shell,我们也会遇到同样的问题,这很烦人。 :|

我也遇到了同样的问题,而且解决方法对我不起作用。 我收到了用户的反馈,这看起来很讨厌,因此我们必须推迟应用的发布,直到此问题解决为止。

什么时候可以修复错误?

使用Navigation.PushAsyc(<Page Object>,false)导航到内容页面时,我在Windows UWP中遇到相同的问题

任何解决方法?

@jfverslus对此有任何更新吗?

@ z07713恐怕还没有,抱歉! 您有没有发现任何可能对我们有帮助的新发现?

因此,Xamarin团队在仓库中发布了一个闪烁的问题,该问题彻底破坏了UX。 这对我来说太疯狂了。 目前正面临这个问题,我后悔没有本地化,因为我在浏览自己的应用程序时感到头疼。

@jfversluis我做了一些测试,希望这对发现错误的人有所帮助:

为了进行复制,我使用了标准的Visual Studio模板,该模板使用Xamarin Forms 4.3.0.908675
我没有更改代码。 标准模板应用程序中没有闪烁。

之后,我将Xamarin Forms包升级到4.3.0.947036
无需更改代码。 闪烁不会出现在模拟器中,而只会出现在真实的Android设备(在我的情况下为Samsung Galaxy A40)上,也不会出现在iOS Simulator或iPhone 8上。

因此,在这两个版本之间必须进行更改以导致闪烁。

太棒了! @AndreasLichtsinn

@jfversluis唯一值得一提的是,由于这个原因,我们完全停止使用shell:/

感谢您对此@AndreasLichtsinn的调查! 非常有价值的信息:)

我发现了眨眼问题的另一件事。
当我使用模板创建Shell应用程序时,如果将导航(在ItemsPage后面的代码中)从“ Navigation.PushAsync(new ItemDetailPage())”更改为“ Shell.Current.GoToAsync(” itemDetailPage“,false) ”,那么我将在Android设备上看到该指示灯闪烁。 我已经在Xamarin.Forms的原始4.3.xxx和最新的4.5.xxx版本中进行了检查。

老实说,尽管Shell导航存在一些导航问题(例如唯一的Page to Page导航,Parameter pass等),但此错误实际上阻止了我的发布,这将使Shell完全无法使用。 因此,请尽快修复该错误!!!

早上好,我也遇到上述相同的问题。 我想知道是否有解决方案?

同样的问题在这里。 禁用动画我并没有真正解决,特别是因为使用Back Button Pop并没有简便的方法。

希望这个问题能尽快解决!

我可以确认版本4.3.0.90867中没有闪烁。

未测试上述版本,但是此问题在4.5.0.356版本中仍然存在

在上一个稳定版本中,该问题仍然存在。

同样的问题在这里。 禁用动画我并没有真正解决,特别是因为使用Back Button Pop并没有简便的方法。

希望这个问题能尽快解决!

@kevinjpetersen仅当您能够尽快修复它时,才会发生这种情况。 它自去年11月中旬开始开放。

你最好的快! 解决的方法是使用4.3.0.90867 v试用@tdamir发现

更多信息:此提交中引入了该错误: https :

好像我将这一行注释掉了:
https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499
那么就没有眨眼了。

有人可以调查这个比我有更多经验的人。

我对此进行了调试,如果我先删除页面,然后调用导航,那么就可以了-不闪烁。

所以在这里: https :

更改此:

            _navigationRequested?.Invoke(this, args);
            if (args.Task != null)
                await args.Task;
            RemovePage(page);

对此:

            RemovePage(page);
            _navigationRequested?.Invoke(this, args);
            if (args.Task != null)
                await args.Task;

@tdamir很好找到!

提供的结果是正确的@tdamir ,问题在于等待args.Task可能是由于从UI-Thread-UI进行上下文切换引起的。

任务总是在等待

https://github.com/xamarin/Xamarin.Forms/blob/7a52542d50797ccc69ae1d8dd84259190d96bdb4/Xamarin.Forms.Platform.Android/Renderers/ShellItemRendererBase.cs#L302

即使在android上,此方法中的args.Task始终是Task.FromResult(...)
https://github.com/xamarin/Xamarin.Forms/blob/7a52542d50797ccc69ae1d8dd84259190d96bdb4/Xamarin.Forms.Platform.Android/Renderers/ShellItemRendererBase.cs#L134
但认为一个发现更可能的罪魁祸首
https://github.com/xamarin/Xamarin.Forms/blob/7a52542d50797ccc69ae1d8dd84259190d96bdb4/Xamarin.Forms.Platform.Android/Renderers/ShellItemRendererBase.cs#L252 -L259

它会在导航时更改背景颜色(不确定是否总是如此)! 为什么?

似乎仅在选项卡中时才发生闪烁。

很多测试要做。

伟大的工作@tdamir和@ahmedalejo! :)

@ahmedalejo很高兴! 只是想把它放在那里,我不认为这只是标签。 我有同样的闪烁,而我所拥有的只是我的AppShell中(也就是没有TabBar):

<?xml version="1.0" encoding="UTF-8"?>
<Shell xmlns="http://xamarin.com/schemas/2014/forms" 
       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
       xmlns:d="http://xamarin.com/schemas/2014/forms/design"
       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
       xmlns:views="clr-namespace:MyApp.Views"
       mc:Ignorable="d"
       Title="MyApp"
       Visual="Material"
       Shell.BackgroundColor="{StaticResource JFBlack}"
       Shell.TitleColor="{StaticResource JFWhite}"
       Shell.ForegroundColor="{StaticResource JFWhite}"
       FlyoutBehavior="Disabled"
       Shell.TabBarIsVisible="False"
       x:Class="MyApp.AppShell">

    <ShellContent Route="login">
        <views:LoginPage />
    </ShellContent>
    <ShellContent Route="overview">
        <views:OverviewPage />
    </ShellContent>

</Shell>

@ahmedalejo是的,颜色变化部分很奇怪,但是如果我将其移除,它仍然会闪烁。

看起来像https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499必须在导航之前被调用。

@PureWeen@rmarinho

您知道为什么要在下面拨打SendAppearanceChange()
https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499

导致弹出闪烁?

有人可以提供解决方法的建议吗?

解决方案

protected override bool OnBackButtonPressed() 
{
  Current.Navigation.PopAsync(false); return true;
}

不管用。

我已经找到了解决方法(由于https://github.com/xamarin/Xamarin.Forms/issues/8581#issuecomment-569583965)

    public class CustomTab : Tab
    {
        protected override Task<Page> OnPopAsync(bool animated)
        {
            // temporary workaround while https://github.com/xamarin/Xamarin.Forms/issues/8581 not fixed
            return base.OnPopAsync(animated: false); 
        }
    }

然后在XAML中使用CustomTab。

以下修复程序仅适用于硬件后退按钮导航(不适用于其他后退导航情况):

protected override bool OnBackButtonPressed() 
{
  Current.Navigation.PopAsync(false); return true;
}

谢谢@pfedotovsky,我有一种预感,它也可能与标签导航有关。

同样发生在我们身上的是,从4.3开始,闪烁就出现在Android上。

刚发现此bug成立一周年了[Shell]导航-闪烁#5755

当goback出现此问题时,屏幕闪烁。

例如:
https://github.com/mallibone/ShellLoginSample

感谢您对@ahmedalejo的探索,它使此超级容易

https://github.com/xamarin/Xamarin.Forms/pull/10158

构建完成后,如果有人要测试nuget,并告诉我问题是否已解决,那将是有帮助的

https://dev.azure.com/xamarin/public/_build/results?buildId=16155&view=results

我用Xaminals样品测试了小坚果

https://github.com/xamarin/Xamarin.Forms/issues/6294

有了这个小细节,闪烁就不再发生

@PureWeen好,所以我做了一个测试:

我使用Xamarin Forms 4.3.0.908675创建了一个新的Shell Sample App->无闪烁
然后我更新到最新的稳定版4.5.0.495->闪烁
然后我更新到您的最新版本4.6.0.1693->不闪烁

做得好! 希望其他人能够确认这一点。

@PureWeen好,所以我做了一个测试:

我使用Xamarin Forms 4.3.0.908675创建了一个新的Shell Sample App->无闪烁
然后我更新到最新的稳定版4.5.0.495->闪烁
然后我更新到您的最新版本4.6.0.1693->不闪烁

做得好! 希望其他人能够确认这一点。

@AndreasLichtsinn找不到Xamarin Forms 4.6.0.1693

@PureWeen好,所以我做了一个测试:

我使用Xamarin Forms 4.3.0.908675创建了一个新的Shell Sample App->无闪烁
然后我更新到最新的稳定版4.5.0.495->闪烁
然后我更新到您的最新版本4.6.0.1693->不闪烁

做得好! 希望其他人能够确认这一点。

@AndreasLichtsinn我也找不到1693年版本! 此外,每晚4.7.0.531仍然闪烁:/

@angelru @RsZoli在PureWeen发布的已发布工件中
image

@angelru谢谢您的测试!!!!

@angelru谢谢您的测试!!!!

@PureWeen我无法测试,无法下载

哦,你在引用@AndreasLichtsinn :-)

谢谢@AndreasLichtsinn的测试!!!

@angelru
转到链接:
https://dev.azure.com/xamarin/public/_build/results?buildId=16155&view=results
点击这里:
image
然后在这里:
image
然后解压缩zip并在此文件夹中创建本地nuget包源:
image
然后选择此本地软件包源并从那里安装:
image

@angelru
转到链接:
https://dev.azure.com/xamarin/public/_build/results?buildId=16155&view=results
点击这里:
image
然后在这里:
image
然后解压缩zip并在此文件夹中创建本地nuget包源:
image
然后选择此本地软件包源并从那里安装:
image

非常感谢!!! 有用!

我可以确认Xamarin Forms 4.6.0.1693中没有闪烁。

谢谢!

由#10158关闭

最新的Xamarin表格4.8存在相同的问题。 我发现在iOS上带有TextType ='Html'标签的页面会导致此问题...

我打开了一个新书。 #12385

此页面是否有帮助?
0 / 5 - 0 等级