Xamarin.Forms 设置 SetHasNavigationBar 为 false 导致 PushAsync 函数跳转问题

9

我正在使用以下代码添加导航栏:

MainPage = new NavigationPage(new Home());

然后,在我的Home.cs页面上,我不想显示导航栏,只有从此页面链接的页面才需要显示导航栏。为了阻止在此页面上显示导航栏,我在Home.cs的开头使用以下代码。

NavigationPage.SetHasNavigationBar (this, false);

当使用 Navigation.Push.Async 跳转到另一个页面时,我在Home.cs底部发生了一个“跳跃”现象(移动?)。好像它会在下一页上添加导航栏的高度。

在iOS上,如果你将Home.cs的背景颜色设置为除白色以外的颜色,则会引起明显的跳跃。

在Android上,只有当返回到Home.cs页面时才会出现这种“跳跃”。

这是我用来跳转到下一页的代码:

btn.Clicked += async (sender, e) => await Navigation.PushAsync (new TestPage ());

我尝试将页面中的所有填充和边距都去除,但这并没有帮助。由于我开始了一个新项目来测试这个问题,所以没有其他我可以更改的内容,我无法想到任何其他的更改来解决这个问题。
下面是Gif演示: 在这个gif中试图展示跳跃的情况 注意:请留意Home.cs(灰色)页面。

我也遇到了同样的问题.. 如何解决? - Yalamandarao
3个回答

6

替代解决方案

在我的情况下,我从一个没有导航栏的SpringBoard进入。因此,在跳转到具有导航栏的ContentPage时,我会在PushAsync之前隐藏导航栏,并在之后显示。

NavigationPage.SetHasNavigationBar(page, false);

await Navigation.PushAsync(page);

NavigationPage.SetHasNavigationBar(page, true);

不确定这是否是一个好的解决方案,但至少它消除了跳动的效果。作为副作用,它使导航栏从顶部滑入,看起来更像是一个精心设计的 UI 动画,而不是内容跳动。


3

经过大量搜索,我发现这是Xamarin.Forms中的一个错误。目前还没有修复或任何解决方法的消息。

请在此处密切关注错误报告:

https://bugzilla.xamarin.com/show_bug.cgi?id=32830


解决方法(有点?)

作为一种解决方法,我已经完全停止了动画的发生。将false作为第二个参数添加将禁用动画。这看起来不是很好,但也许比看到小小的“跳跃”问题更好。

btn.Clicked += async (sender, e) => await Navigation.PushAsync (new TestPage (), false);

那太糟糕了。花了这么长时间,但是从未修复。 - Bright Lee

0

作为一个临时解决方案,如果适用于您的应用程序,您可以使用PushModalAsync。


虽然它解决了我遇到的问题,但对于我的应用程序,我觉得它并不适用。我更希望找到一种解决方法,使动画保持原样,但停止“跳跃”问题。谢谢你的建议,可能会对某些人有用。 - Ruddy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接