我们正在开发一款MAUI应用程序,在选项卡之间导航时遇到了问题。
我们有一个带有TabBar
的shell应用程序,在里面我们定义了5个选项卡:
<TabBar>
<Tab Title="Home"
Icon="homeicon.png">
<ShellContent ContentTemplate="{DataTemplate Pages:FeedPage}" />
</Tab>
<Tab Title="Messages"
Icon="messageicon.png">
<ShellContent ContentTemplate="{DataTemplate Pages:MessagesPage}" />
...
</TabBar>
我们还在其中一个选项卡xaml中定义了Shell.TitleView,如下所示:
<Shell.TitleView>
<Grid Padding="5" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<ImageButton Grid.Column="2" Source="profileicon.png"
HorizontalOptions="CenterAndExpand"
VerticalOptions="CenterAndExpand"
Command="{Binding ProfileButtonTapped }" />
<ImageButton Grid.Column="1" Source="coinicon.png"
...
...
</Grid>
</Shell.TitleView>
当我们试图返回到定义Shell.TitleView的选项卡时,就会出现问题。我们得到的错误是:
Java.Lang.IollegalStateException:'指定的子级已经有一个父级。必须首先对子级的父级调用removeView((。'
标题视图中的StackLayout也会出现此错误。。。我们做了一些挖掘,发现如果我们从TitleView中删除布局,错误就不会再发生了,所以我们猜测这与它有关。
编辑1:每次我切换标签时,我都注意到了这个输出
"线程已完成:#11线程0xb已退出,代码为0(0x0(。线程已启动:#12线程已完成:#10线程0xa已退出,代码为0(0x0(。[TabLayout]不支持MODE_SRCROLLABLE+GRAVITY_FILL,将使用GRAVITY_START代替";
不幸的是,这是MAUI本身的一个已知错误。当从Shell选项卡#4506导航回页面时,TitleView在Android上崩溃