Xamarin.Forms SetHasNavigationBar false会导致PushAsync上跳转

我正在添加一个导航栏

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,但这并没有帮助。 当我开始一个新的项目来testing这个时候,我没有什么可以改变的,所以我想不出任何其他的改变可以解决这个问题。

Gif下面: 试图显示在这个gif的跳跃

注意: 请留意Home.cs (灰色)页面。

Solutions Collecting From Web of "Xamarin.Forms SetHasNavigationBar false会导致PushAsync上跳转"

替代工作

我的情况我是从没有导航栏的SpringBoard来的。 所以,当我带着导航栏进入ContentPage的时候,就是隐藏了之前和在PushAsync之后显示导航栏。

 NavigationPage.SetHasNavigationBar(page, false); await Navigation.PushAsync(page); NavigationPage.SetHasNavigationBar(page, true); 

不知道这是不是一个整洁的解决scheme,但至less它摆脱了跳跃的影响。 作为副作用,它使导航栏从顶部滑入,看起来更像是一个精心devise的UIanimation,然后跳转内容。

经过很多环视后,我发现这是Xmarin.Forms中的一个bug。 没有消息什么时候会有修复或任何工作。

请留意这里的错误报告:

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


工作(ish?)

作为一种解决方法,我已经停止了animation的发生。 作为第二个参数添加false将禁用animation。 这看起来不错,但也许会更好,然后看到小“跳”的问题。

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

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