Xamarin.Forms SetHasNavigationBar false导致PushAsync跳转

时间:2016-03-14 09:19:42

标签: c# android ios xamarin xamarin.forms

我正在使用

添加导航栏

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 ());

我试图从页面中删除所有padding.margins,但这没有帮助。当我开始一个新项目来测试这个时,我没有任何其他东西可以改变,所以我想不出任何可以解决这个问题的其他变化。

以下Gif: Tried to show the jump in this gif

注意: 密切关注Home.cs(灰色)页面。

3 个答案:

答案 0 :(得分:6)

替代工作

我的情况我来自没有导航栏的SpringBoard。所以我在使用导航栏访问ContentPage时所做的就是先隐藏并在PushAsync之后显示导航栏。

NavigationPage.SetHasNavigationBar(page, false);

await Navigation.PushAsync(page);

NavigationPage.SetHasNavigationBar(page, true);

不确定这是否是一个简洁的解决方案,但至少它摆脱了跳跃效应。作为副作用,它使导航栏从顶部滑入,看起来更像一个精心设计的UI动画,然后跳转内容。

答案 1 :(得分:3)

经过大量的回顾,我发现这是Xmarin.Forms中的一个错误。没有关于何时会有修复或任何解决方法的消息。

请关注错误报告:

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

解决(ish?)

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

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

答案 2 :(得分:0)

作为临时解决方法,您可以使用PushModalAsync,如果这将适用于您的应用。