Xamarin.Forms SetHasNavigationBar false 导致在 PushAsync 上跳转
Xamarin.Forms SetHasNavigationBar false causes jump on PushAsync
我正在使用
添加导航栏
MainPage = new NavigationPage (new Home ());
然后在我的 Home.cs
页面上,我不想显示导航栏,只有在该页面上 link 我想显示导航栏的页面。为了阻止导航栏在此页面上显示,我在 Home.cs
.
的开头使用了以下代码
NavigationPage.SetHasNavigationBar (this, false);
从这里使用 Navigation.Push.Async
转到另一个页面时,我在 Home.cs
的底部得到一个 "jump"(移动?)。就像它增加了下一页导航栏的高度。
在 iOS 上,如果您将 Home.cs
上的背景颜色设置为白色以外的任何颜色,它会导致明显的跳跃。
在 Android 上,似乎只有在导航回 Home.cs
页面时才导致此 "jump"。
这是我用来推送到下一页的代码。
btn.Clicked += async (sender, e) => await Navigation.PushAsync (new TestPage ());
我试图从页面中删除所有 padding.margins 但这没有帮助。当我开始一个新项目来测试它时,我没有任何其他可以改变的东西,所以我想不出任何其他可以解决这个问题的改变。
动图如下:
Tried to show the jump in this gif
注意: 关注Home.cs
(灰色)页面。
环顾四周后,我发现这是 Xmarin.Forms 中的一个错误。没有关于何时会有修复或任何解决方法的消息。
请留意此处的错误报告:
https://bugzilla.xamarin.com/show_bug.cgi?id=32830
变通(大概?)
作为解决方法,我完全停止了动画的发生。添加 false
作为第二个参数将禁用动画。这看起来不太好,但可能比看到 "jump" 这个小问题要好。
btn.Clicked += async (sender, e) => await Navigation.PushAsync (new TestPage (), false);
作为临时解决方法,您可以使用 PushModalAsync,如果这适合您的应用程序的话。
替代方案
我的情况是我来自没有导航栏的 SpringBoard。因此,当我转到带有导航栏的 ContentPage 时,我所做的是在 PushAsync 之前隐藏并在 PushAsync 之后显示导航栏。
NavigationPage.SetHasNavigationBar(page, false);
await Navigation.PushAsync(page);
NavigationPage.SetHasNavigationBar(page, true);
不确定这是否是一个巧妙的解决方案,但至少它摆脱了跳跃效果。作为副作用,它使导航栏从顶部滑入,看起来更像是经过深思熟虑的 UI 动画然后跳转内容。
我正在使用
添加导航栏MainPage = new NavigationPage (new Home ());
然后在我的 Home.cs
页面上,我不想显示导航栏,只有在该页面上 link 我想显示导航栏的页面。为了阻止导航栏在此页面上显示,我在 Home.cs
.
NavigationPage.SetHasNavigationBar (this, false);
从这里使用 Navigation.Push.Async
转到另一个页面时,我在 Home.cs
的底部得到一个 "jump"(移动?)。就像它增加了下一页导航栏的高度。
在 iOS 上,如果您将 Home.cs
上的背景颜色设置为白色以外的任何颜色,它会导致明显的跳跃。
在 Android 上,似乎只有在导航回 Home.cs
页面时才导致此 "jump"。
这是我用来推送到下一页的代码。
btn.Clicked += async (sender, e) => await Navigation.PushAsync (new TestPage ());
我试图从页面中删除所有 padding.margins 但这没有帮助。当我开始一个新项目来测试它时,我没有任何其他可以改变的东西,所以我想不出任何其他可以解决这个问题的改变。
动图如下: Tried to show the jump in this gif
注意: 关注Home.cs
(灰色)页面。
环顾四周后,我发现这是 Xmarin.Forms 中的一个错误。没有关于何时会有修复或任何解决方法的消息。
请留意此处的错误报告:
https://bugzilla.xamarin.com/show_bug.cgi?id=32830
变通(大概?)
作为解决方法,我完全停止了动画的发生。添加 false
作为第二个参数将禁用动画。这看起来不太好,但可能比看到 "jump" 这个小问题要好。
btn.Clicked += async (sender, e) => await Navigation.PushAsync (new TestPage (), false);
作为临时解决方法,您可以使用 PushModalAsync,如果这适合您的应用程序的话。
替代方案
我的情况是我来自没有导航栏的 SpringBoard。因此,当我转到带有导航栏的 ContentPage 时,我所做的是在 PushAsync 之前隐藏并在 PushAsync 之后显示导航栏。
NavigationPage.SetHasNavigationBar(page, false);
await Navigation.PushAsync(page);
NavigationPage.SetHasNavigationBar(page, true);
不确定这是否是一个巧妙的解决方案,但至少它摆脱了跳跃效果。作为副作用,它使导航栏从顶部滑入,看起来更像是经过深思熟虑的 UI 动画然后跳转内容。