我在执行iOS上的最后一个按钮时遇到问题。
如果选择了列表中的元素,例如单击“第三项”,然后在“按钮2”上进行制表,该命令将不会在iOS上执行。在Android上会显示该消息。
[将ItemDetailPage
包裹在NavigationPage
中时出现问题。但是对于实际的应用程序,此导航页面是必需的,因此导航服务可以正常工作。
Source code for example app on GitHub
async void OnItemSelected(object sender, EventArgs args)
{
var layout = (BindableObject)sender;
var item = (Item)layout.BindingContext;
// Causes issue
await Navigation.PushAsync(new NavigationPage(new ItemDetailPage(new ItemDetailViewModel(item))));
// No issue
// await Navigation.PushAsync(new ItemDetailPage(new ItemDetailViewModel(item)));
}
由于您已经将ItemsPage设置为导航页面,所以不必再次将ItemDetailPage设置为导航页面。如果执行此操作,则页面中将有两个导航栏。
<NavigationPage Title="Browse">
<NavigationPage.Icon>
<OnPlatform x:TypeArguments="FileImageSource">
<On Platform="iOS" Value="tab_feed.png"/>
</OnPlatform>
</NavigationPage.Icon>
<x:Arguments>
<views:ItemsPage />
</x:Arguments>
</NavigationPage>
并且在您的情况下,问题是由布局引起的。当页面在iOS中具有两个导航栏时,第二个按钮的框将超出屏幕区域。因此,即使命令在屏幕上正常显示,也永远不会被调用。如果删除第四行和ListView,第二个按钮将再次可单击。
最好的解决方案(或正确的解决方案)就是您所做的。