摘要
我希望有一个适用于 iOS 和 Android 的 MvvmCross 解决方案,它实现了用于导航的 FlyoutNavigation/汉堡菜单/滑动菜单。
示例代码
https://github.com/benhysell/V.FlyoutTest
问题
Android 项目没有问题,iOS 项目正在获取 View 并将框架大小加倍。我不确定是不是因为我使用 FlyoutNavigation
的方式iOS 上的组件,或者我正在做的事情 FlyoutNavigation
在 MvvmCross 中。我在没有任何运气的情况下使用自定义 ViewPresenter。
问题详细描述
我见过几种为 MvvmCross 实现 FlyoutNavigation/汉堡菜单/滑动菜单的解决方案,但没有一个实现在统一的解决方案中同时处理 Android 和 iOS。每种方法都有自己的核心项目,然后他们对菜单数据、管理 View 等的位置有自己的想法。
因此,我着手创建一个统一的架构。
见 https://github.com/benhysell/V.FlyoutTest用于使用 iOS 和 Android 项目的单个解决方案的工作演示,这些项目都实现了 FlyoutNavigation/汉堡菜单/滑动菜单。
我找到并关注了 http://motzcod.es/post/60427389481/effective-navigation-in-xamarin-android-part-1 ,来源:https://github.com/jamesmontemagno/Xam.NavDrawer对于 Android 项目,效果很好。 Android 项目使用带有片段和交换的原生抽屉导航 Views
进进出出很好。
在我使用这种架构的解决方案中,我有三个主要的 ViewModel
s... HomeViewModel
, EnterTimeViewModel
, 和 CreateNewJobViewModel
. HomeViewModel
保存滑动菜单数据,另外两个提供用户将与之交互的 View 。在我的示例中,我正在创建一个小时输入应用程序,因此用户可以针对工作输入时间,或创建一个新工作。
使用我的 ViewModel
在 iOS 中我决定使用 FlyoutNavigation
组件,https://github.com/Clancey/FlyoutNavigation .我尝试使用 http://slodge.blogspot.com/2013/07/awesome-sliding-menus-from-big-frank.html 中描述的链接/项目,但没有成功地使用 Android 项目所依赖的已经建立的 .Core 项目来增强他们的实现。
我能够快速实现 FlyoutNavigation
我的 HomeView
中的组件在 iOS 中,我以为我是自由而清晰的,但是 Views
它们本身的大小是设备上应有的大小的 2 倍。在屏幕截图中,“输入时间”和“创建新工作”的标题应该居中,就像 MvvmCross 中的任何其他标题一样,但要靠右。查看“输入时间” View 、打开的菜单和“创建新作业” View 的三个屏幕截图。::我使用暂停按钮来制作一个快速而肮脏的“汉堡包”::
感觉就像我错过了一些简单的东西/我需要实现一个自定义 ViewPresenter
适用于 iOS,但我尝试关注其他人并没有成功。关于我应该采取的方向/我应该尝试的事情的想法?
最佳答案
找到了! @Stuart 为我指明了正确的方向!
我并不宣称这是 Android 和 iOS 菜单最干净的解决方案……但这是一个开始。
为了解决调整大小的问题,我更改了设置 FlyoutNavigation
的位置View.Frame
和 View.Bounds
至 ViewWillAppear
在 HomeView
.
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
navigation.View.Frame = UIScreen.MainScreen.Bounds;
navigation.View.Bounds = UIScreen.MainScreen.Bounds;
}
更新代码发布到github https://github.com/benhysell/V.FlyoutTest
关于xamarin.ios - MvvmCross - 适用于 Android 和 iOS 的弹出式导航、汉堡菜单、滑动菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22851261/